Java容器介绍
一、《Java编程思想》第四版容器介绍1、不包含抽象类和遗留构件出自书的第十一章“持有对象”,英文版的“HoldingYourObjects”,章末总结部分。总计只有四种容器:List、Set、Map、Queue。他们各有两到三个实现版本。常用的容器用黑色的粗线框表示。点线框表示接口,实线框表示普通的(具体的)类。带有空心箭头的点线表示一个特定的类实现了一个接口。实心...
一、《Java编程思想》第四版容器介绍
1、不包含抽象类和遗留构件
出自书的第十一章“持有对象”,英文版的“Holding YourObjects”,章末总结部分。
总计只有四种容器:List、Set、Map、Queue。他们各有两到三个实现版本。常用的容器用黑色的粗线框表示。
点线框表示接口,实线框表示普通的(具体的)类。
带有空心箭头的点线表示一个特定的类实现了一个接口。
实心箭头表示某个类可以生成箭头所指向类的对象。例如,任意的Collection可以生成Iterator,而List可以生成ListIterator(也能生成普通的Iterator,因为List继承自Collection)。
2、包含抽象类和遗留构件
出自第17章,“容器深入研究”,英文版“Container in Depth”。
二、Collection单对象接口说明
1、Collection中包含的方法
Collection不包含随机访问元素的get()方法。因为,Collection包含Set,而Set是自己维护内部顺序的(随机则没有意义)。因此,如果想要检查Collection中的元素,就必须使用迭代器实现。
2、包含的子接口、类
(1)List说明:
常用List:
- ArrayList,采用顺序式的结果进行数据的保存。长于随机访问元素,但在List中间插入和删除元素是较慢。这跟它的存储机制有关,添加或者删除某个元素时,要移动该元素所在位置之后的所有元素。
- LinkedList,保存的是前后元素,即,它的每一个节点中保存的是两个元素对象,分别对应于它的上一个及下一个节点,所以LinkedList占用的内存空间比ArrayList大。同时LinkedList比ArrayList多实现了一个Queue队列数据接口。通过代价较低的在List中进行的插入和删除操作,提供了优化的顺序访问。但在随机访问方面相对比较慢。
旧的子类:
- Vector,该类中的部分方法使用了synchronized关键字声明(同步操作)。
(2)Set说明:
- Set(interface),存入Set的每个元素都必须是唯一的。加入Set的元素必须定义equals()方法以确保对象的一致性。Set与Collection有同样的接口。
- HashSet,为快速查找而设计的Set,散列存放,没有顺序。存入HashSet的元素必须定义hashCode()。
- TreeSet,保持次序的Set,底层为树结构。元素必须实现Comparable接口(进行排序操作)。
- LinkedHashSet,具有HashSet的查找速度,内部使用链表维护元素的次序(按照插入的次序)。元素必须定义hashCode()。
三、Map接口说明
——注:子类中可添加HashTable。
(1) 对Map中使用的键的要求与对Set中的元素的要求一样。
- 任何键都必须具有一个equals()方法;
- 如果键被用于散列Map,那么它必须还具有恰当的hashCode方法;
- 如果键被用于TreeMap,那么它必须实现Comparable。
(2)关于HashTable的补充说明:
- 该类出现于JDK1.0,在JDK1.2时多实现了一个Map接口,从而得以保存下来继续使用;
- 使用HashTable子类实例化的Map集合中,保存的key或value都不允许出现null,否则会出现“NullPointerException”异常。
No. | 区别点 | HashMap | HashTable |
1 | 推出时间 | JDK1.2,属于新类 | JDK1.0,属于旧类 |
2 | 性能 | 采用异步处理 | 采用同步处理 |
3 | 数据安全 | 非线程安全 | 线程安全 |
4 | 设置null | 允许key或value为null | 不允许设置null |
(3)《Thinging in Java》中的英文对照图表:
四、Queue
包括两个实现:LinkedList与PriorityQueue。
参考
1、Java集合框架的讲解;
更多推荐
所有评论(0)