您的位置:首页 > 其它

一、对象导论(二)

2016-04-13 18:54 232 查看
本章第6和第7部分讲的分别是继承和多态,后面会有两大章节详细描述,因此暂时跳过这两部分继续往下学习。


8、单根继承结构

Java中的单根集成结构是指在Java中,所有的类最终都继承自单一的基类——Object。事实证明,单根继承结构带来了很多好处。由于树中描述的远比我自己组织的语言好,所以以下两段内容部分摘抄了原话。

单根继承结构中的所有对象都有一个共用接口,所以它们归根结底都是相同的基本类型,而C++无法保证这一点。单根继承结构保证所有对象都具备某些功能,因此在系统中我们可以在每个对象上都能执行一些基本操作,所有的对象都可以很容易地在堆上创建,而参数传递也得到了极大的简化。

单根继承结构使垃圾回收变得容易得多,而垃圾回收器正是Java相对C++的重要改进之一。由于所有对象都保证具有其类型信息,因此不会因无法确定对象的类型而陷入僵局。这对于系统级操作(如异常处理)显得尤其重要,并且给编程带来了更大的灵活性。

9、容器

提到容器,大家容易想到Tomcat,事实上,这里的容器指的是能够容纳多个相同类型的对象的一种特殊的对象,这个容器在任何时候都能够扩充自己以容纳我们想要放入的对象。因此当我们不知道将来需要存放多少个对象的时候,只需要创建一个容器,将对象都放到容器里,然后让容器处理细节就好。

说了这么多,其实所谓的容器,在Java里就是大家耳熟能详的List、Map、Set,以及由它们互相配合形成的新的容器,如队列、树、栈等等。容器的种类如此之多,仅仅List接口的实现类就有十几种之多(平时常用的无外乎ArrayList和LinkedList),JDK为我们提供这么多选择是有原因的



首先,不同容器提供了不同类型的接口和外部行为。例如堆栈的先进后出与队列的先入先出、List的有序性和Set的无序性等等,其内部机制不同导致了外部行为的差异性。

其次,不同容器对于某些操作具有不同的效率。一个最经典的例子就是ArrayList和LinkedList的比较,两者虽然同实现了List接口,对外接口和行为是一致的,但是在一些操作的效率上确实天壤之别。在随机访问效率方面,ArrayList比较高效,能够在O(1)内访问到任何位置的元素,而LinkedList则为O(n);在中间增删元素方面,LinkedList能够在O(1)内完成,而ArrayList则需要O(n)。

因此我们在开发的时候应该注意区别不同容器的特性,使用最合适的容器来容纳对象们,以追求最高效率。

9.1 参数化类型

前面我们提到过容器中存的都是一些对象,但是究竟是什么类型的对象还未可知,在Java 5之前,程序员需要记住里面放了什么类型的东西,因为那个年代,只要是个Object就能往里放,而Java中所有对象都是Object,结果可想而知,前面定义了一个容器,后面使用的时候却不记得里面放的什么类型,还需要回到前面去看一下,以免发生类型转化错误。

Java 5的重大变化之一就是增加了参数化类型,我们称之为“泛型”,例如我们可以使用下面这样的语句来创建一个存储Shape的ArrayList:

ArrayList<Shape> shapes = new ArrayList<Shape>();


这样在shapes这个List中,我们就只能放Shape类型的对象了,减轻了程序员负担,也消除了犯错的可能性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: