一、《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”异常。
HashMap与HashTable的区别
No.区别点HashMapHashTable

1

推出时间JDK1.2,属于新类JDK1.0,属于旧类
2性能采用异步处理采用同步处理
3数据安全非线程安全线程安全
4设置null允许key或value为null

不允许设置null

(3)《Thinging in Java》中的英文对照图表:

四、Queue

包括两个实现:LinkedListPriorityQueue。


参考

1、Java集合框架的讲解

2、Java集合与框架总结与学习

3、HashTable和HashMap的区别详解

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐