一、java 容器类类库的用途是“保存对象”,并将其划分分两个不同的概念
1、Collection 一个独立的元素的序列,这些元素都服从一条或多条规则。List必须按照插入的顺序保存元素,Set不能有重复元素,Queue按照排队规则来确定对象产生的顺序(通常与它们被插入的顺序相同)
2、Map 一组成对的“键值对”对象,允许你使用键来查找值。
常用容器类型的分类和特点的总结如下表所示:
Collection (一个独立的元素的序列) | List (List必须按照插入的顺序保存元素) | ArrayList (ArrayList随机访问效率比较高) |
LinkedList (LinkedList插入或删除元素效率比较高) | ||
Set (Set不能有重复元素) | HashSet (HashSet提供最快的查询速度) | |
TreeSet (TreeSet保持元素处于排序状态) | ||
LinkedHashSet (LinkedHashSet以插入顺序保存元素) | ||
Queue (Queue按照排队规则来确定对象产生的顺序) | 各种Queue以及栈的行为,由LinkedList提供支持 | |
Map (一组成对的“键值对”对象,允许你使用键来查找值) | HashMap (HashMap设计用来快速访问) | |
TreeMap (TreeMap保持“键”始终处于排序状态,所以没有HashMap快) | ||
LinkedHashMap (LinkedHashMap可以保持元素插入的顺序,也通过散列提供了快速访问能力) |
注释:像Vector、Hashtable和Stack 等过时的类应该避免使用,当然Stack完全可以利用LinkedList来实现。
二、java常用容器分类图
1、点线框表示接口,实线框表示普通的(具体的)类。带有空心箭头的点线表示一个特定的类实现了一个接口,实心箭头表示某个类可以生成箭头所指向类的对象。例如,任意的Collection可以生成Iterator,而List可以生成ListIterator(也可以生成普通的Iterator,因为List继承自Collection)
2、从上图可以看出Map接口和Collection是两个完全独立的分支,Map和Collection之间唯一的重叠就是Map可以使用entrySet()和values()方法来产生Collection。(或者通过keySet()方法来产生Collection)