一、基础

Java的容器类库用于实现数据结构(核344),以解决在运行时才知道对象数量的问题(思216),容器类库是面向对象语言最重要的类库(思524)。

两个核心接口是Collection和Map(思219)。List、Set、Queue继承了Collection,Collection继承了Iterable接口,Iterable接口可用于for-each遍历,因此List、Set、Queue都可以用for-each的方式遍历(核352,思227)。

Collection的实用方法有size、isEmpty、contains、remove等(核350,思470)。

二、List

List是有序集合,定义了add、remove、get、set等方法(核352)。

List的两个实现:ArrayList是数组列表(核362,思223),擅长随机读取;LinkedList为链表(核355,思223),擅长增加删除。

三、Set

Set是元素不重复的集合(核352,思231)。

HashSet是散列集,以散列表的方式存储元素(核363)。

TreeSet是红黑树实现的有序集合,以任意顺序将元素插入集合,遍历时可以按排序后顺序取出(核366)。

LinkedHashSet是散列表与链表的联合体,能记住插入数据项的顺序,以按该顺序遍历。(请分清「排序后顺序」与「插入顺序」的区别)

四、Map

Map是从键key到值value的映射,可以快速查找现有的元素(核372),定义了get、put、putAll、containsKey、containsValue等方法(核374)。

HashMap是散列映射,比较快;TreeMap用键的顺序对元素排序(核372)。

LinkedHashMap能记住插入数据项的顺序,以按该顺序遍历(核378)。

getOrDefault方法可以根据键从Map中取值,如果该键不存在则使用默认值;putIfAbsent方法当键不存在时插入键值(核375)。这两种方法可以实现键存在或不存在时的通用操作。

Map的keySet、values、entrySet方法分别返回键集、值集、元素集,得到的集可以用于遍历(核376)。

WeakHashMap使用弱引用保存键,当键不再使用时元素被回收(核377)。

五、其他

Queue是队列,只允许从容器的一端插入对象,从另一端移除对象(思222),LinkedList是Queue的一种实现(思236)。PriorityQueue是优先级队列,以任意顺序将元素插入队列,即可以按排序后的次序检索(思237)。

Arrays.asList()方法用于将数组转为List,该List不能改变大小(核382)。

有序的List、Set、Map可以用subList/subSet/subMap方法获得子范围,对子范围可以应用任何操作,更改将影响到原集合(核382)。

Collections.unmodifiableList/Set/Map方法用于产生集合的不可修改视图(核383)。

Collections.synchronizedList/Set/Map方法用于产生集合的同步视图(核384)。

Collections.sort用于给List排序,要求元素是Comparable的(核389)。

Collections.binarySearch用于二分查找,要求元素是有序的(核391)。

Collections还有min/max/copy/fill/addAll/replaceAll/reverse等实用方法(核393,思512)。

Collection有removeAll/retainAll的实用方法,以获得差集和交集(核394)。

使用newHashSet<>(Arrays.asList(values))和someSet.toArray(newString[someSet.size()])进行集合和数组的相互转化(核395)。

Properties用于读取配置选项(核398)。

古老的Vector、Hashtable、Stack不要再用了(思245)。

至于线程安全的容器,参考并发篇。