集合框架体系结构图如下:位于java.util包下,其中LinkIterator应该是写错了,因为jdk中没有这个类,应该是ListIterator,它功能相对Iterator更多,且只能用于List的遍历。
1、ArrayList、LinkedList、Vector、Stack:它们都是List下面的实现类,相同点是都有序,允许重复,允许null值,可以用Collections.synchronizedList(List list)将线程不完全的List集合类转化为安全的集合类
实现原理 | 线程安全 | |
ArrayList | 数组,随机查找快,增删慢 | no |
LinkedList | 双向链表,增删快,随机查找慢 | no |
Vector | 数组,与ArrayList类似 | yes |
Stack | 栈,先进后出 | yes |
2、HashSet、TreeSet、LinkedHashSet:Set接口的实现类,相同点:不允许重复,都是线程不安全的
实现原理 | null值 | 有序性 | |
HashSet | 哈希表 | 允许一个 | 无序 |
LinkedHashSet | 哈希表+链表 | 允许一个 | 有序,按照插入顺序 |
TreeSet | 红黑树 | 不允许 | 有序,两种排序方式:自然排序、定制排序 |
3、HashMap、HashTable、LinkedHashMap、TreeMap、WeakHashMap、IdentityHashMap:相同点,我只能说它们都是Map
WeakHashMap、IdentityHashMap两个不常用,前者是“弱键”,当某个键不再被引用时,允许被清理,后者的key比较时调用==而不是equal
重点比较前面4个
允许null | 线程安全 | 有序性 | |||
key | value | ||||
HashMap | 允许为 null | 允许为 null | 不安全 | 无序 | |
HashTable | 不允许为 null | 不允许为 null | 安全 | 无序 | |
LinkedHashMap | 允许为 null | 允许为 null | 不安全 | 有序:按照插入顺序 | |
TreeMap | 不允许为 null | 允许为 null | 不安全 | 有序,默认按照key升序,也可以自定义排序规则 |
4、Queue:队列的一种,先进先出,实现类图中没有给出来,有3种分类:双端队列(Deque)LinkedList是其中一个实现类;阻塞队列;非阻塞队列。实现有很多,目前水平有限,等专门学习时再补充。
5、除了这些集合类以外,还有两个排序接口,Comparable、Comparator,它们就是实现上面表格中自然排序和定制排序的两个接口,Iterator和ListIterator用于遍历,Collections和Arrays是两个工具类,提供一些用于处理集合类的静态方法。