一、对象导论(二)
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类型的对象了,减轻了程序员负担,也消除了犯错的可能性。
相关文章推荐
- Android 性能优化典范
- appium-android项目执行报错
- iOS UITableView 引起的崩溃问题
- 13. Roman to Integer
- 如何调用android的系统接口
- 使用Selenium+firefox抓取网页指定firefox_profile后的问题
- 简单比较国内外主流浏览器的性能
- IOS开发之所有类型的UIKeyboardType图片展示
- Socket编程--TCP/UDP
- Angularjs学习笔记9_JSON和JSONP
- CentOS6.5配置网络
- 手游性能之渲染分析3
- IPC小记 Socket
- 过滤驱动程序总结
- MySQL乱码问题转载
- 思维导图制作
- Python虚拟环境安装virtualenv
- bzoj 4401: 块的计数 水题
- jsp的EL表达式
- 剑指offer 重建二叉树