集合框架系列包含的文章较多,本篇将系列涉及的文章整理出一个索引,便于查找。
版本说明:本系列源码解读基于 JDK1.8,请注意区分版本差异。
集合框架的类关系图如下:
下面以图表的形式对各个集合的实现进行对比:
类名 | 底层结构 | 是否允许重复元素 | 是否允许元素为空 | 是否线程安全 | 线程安全的实现方式 | 扩容时机 | 扩容机制 | 文章链接 |
---|---|---|---|---|---|---|---|---|
ArrayList | 数组 | 是 | 是 | 否 | - | 数组填满时 | 扩容至原来的1.5倍 | 查看 |
CopyOnWriteArrayList | 数组 | 是 | 是 | 是 | AQS | 每次添加元素时 | 每次加一 | 查看 |
LinkedList | 双向链表 | 是 | 是 | 否 | - | - | - | 查看 |
LinkedBlockingQueue | 单向链表 | 是 | 是 | 是 | AQS | - | - | 查看 |
ArrayBlockingQueue | 数组 | 是 | 是 | 是 | AQS | - | - | 查看 |
SynchronousQueue | 队列或栈 | 是 | 是 | 是 | AQS | - | - | 查看 |
Vector | 数组 | 是 | 是 | 是 | synchronized | 元素数量超过数组长度时 | 每次扩容指定的长度或者扩容至原来的两倍 | 查看 |
Stack | 数组 | 是 | 是 | 是 | synchronized | 同 Vector | 同 Vector | 查看 |
ArrayQueue | — | — | — | — | — | — | 待发布 | |
TreeSet | — | — | — | — | — | — | 待发布 | |
HashSet | — | — | — | — | — | — | 待发布 | |
LinkedHashSet | — | — | — | — | — | — | 待发布 |
类名 | 底层结构 | 是否允许值为空 | 是否线程安全 | 线程安全的实现方式 | 扩容时机 | 扩容机制 | 文章链接 |
---|---|---|---|---|---|---|---|
TreeMap | 红黑树 | 否 | 否 | - | - | - | 查看 |
HashTable | 数组+单向链表 | 否 | 是 | synchronized | 元素数量大于扩容阈值时 | 单线程扩容,扩容后容量为原来的2倍加一 | 查看 |
HashMap | 数组+单向链表 | 是 | 否 | - | 元素数量大于扩容阈值时 | 单线程扩容,扩容后容量为原来的2倍 | 查看 |
LinkedHashMap | 数组+单向链表 | 是 | 否 | - | 元素数量大于扩容阈值时 | 单线程扩容,扩容后容量为原来的2倍 | 查看 |
ConcurrentHashMap | 数组+单向链表 | 是 | 是 | CAS+synchronized | 元素数量大于扩容阈值时 | 并发扩容,扩容后容量为原来的2倍 | 查看 |