目录
1. List(有序、可重复、支持索引)
-
ArrayList
-
底层:动态数组
-
特点:查询快(O(1)),增删慢(需要移动元素)
-
线程不安全,默认初始容量为10,扩容为1.5倍。
-
-
LinkedList
-
底层:双向链表
-
特点:增删快(O(1)),查询慢(O(n))
-
支持队列(
Deque
)操作,如addFirst()
,pollLast()
。
-
2. Set(无序、唯一)
-
HashSet
-
底层:基于
HashMap
实现(哈希表) -
特点:插入、删除、查询的时间复杂度接近O(1)
-
无序,依赖
hashCode()
和equals()
方法去重。
-
-
LinkedHashSet
-
底层:链表 + 哈希表
-
特点:保持元素的插入顺序。
-
-
TreeSet
-
底层:红黑树(基于
TreeMap
实现) -
特点:元素自然排序或通过
Comparator
自定义排序,增删查时间复杂度O(log n)。
-
3. Queue(队列)
-
PriorityQueue
-
底层:堆(默认最小堆)
-
特点:元素按优先级排序,出队顺序由优先级决定。
-
-
ArrayDeque
-
底层:动态数组(双端队列)
-
特点:支持高效的头尾插入和删除操作,可替代
Stack
(性能更好)。
-
Map 接口(键值对)
1. 通用Map
-
HashMap
-
底层:数组 + 链表/红黑树(Java 8后链表长度>8时转红黑树)
-
当同一个位置的链表超过八个,或者数组长度超过64个,会将链表转化为红黑树
-
特点:键无序,允许
null
键和null
值,线程不安全。 -
初始容量16,负载因子0.75(扩容阈值=容量*负载因子)。
-
若数组长度不超过64,链表长度超过8个,则会进行扩容,将数组长度翻倍
-
-
LinkedHashMap
-
底层:链表 + 哈希表
-
特点:保持键的插入顺序或访问顺序(LRU缓存场景)。
-
-
TreeMap
-
底层:红黑树
-
特点:键按自然顺序或
Comparator
排序,支持范围查询。
-
-
Hashtable
-
线程安全的哈希表(方法用
synchronized
修饰),不允许null
键值,性能较低,已被ConcurrentHashMap
替代。
-
2. 并发安全Map
-
ConcurrentHashMap
-
线程安全的高并发哈希表(分段锁/CAS + 同步块),替代
Hashtable
。 -
Java 8后采用
Node + synchronized + CAS
实现。
-
-
ConcurrentSkipListMap
-
基于跳表实现的有序并发Map,支持高并发查询和更新。
-