一. 集合框架体系结构
1.1 核心接口层次

1.2 主要实现类对比
接口 | 有序 | 可重复 | 线程安全 | 主要实现类 |
---|---|---|---|---|
List | 是 | 是 | 部分 | ArrayList, LinkedList, Vector, CopyOnWriteArrayList |
Set | 部分 | 否 | 部分 | HashSet, LinkedHashSet, TreeSet, CopyOnWriteArraySet |
Queue | 是 | 是 | 部分 | LinkedList, PriorityQueue, ArrayBlockingQueue |
Map | 部分 | Key唯一 | 部分 | HashMap, LinkedHashMap, TreeMap, ConcurrentHashMap |
二. List 接口及实现类
2.1 ArrayList
-
特点:动态数组实现,随机访问快(O(1)),插入删除慢(O(n))
-
扩容:默认初始容量10,扩容1.5倍
-
线程安全 :非线程安全,可用
Collections.synchronizedList
包装
java
List<String> list = new ArrayList<>();
list.add("Java");
list.get(0); // 随机访问
2.2 LinkedList
-
特点:双向链表实现,插入删除快(O(1)),随机访问慢(O(n))
-
额外功能:实现了Deque接口,可用作队列/栈
java
LinkedList<String> linkedList = new LinkedList<>();
linkedList.addFirst("First");
linkedList.addLast("Last");
2.3 Vector
-
特点:线程安全的动态数组(方法同步)
-
替代方案 :推荐使用
CopyOnWriteArrayList
2.4 CopyOnWriteArrayList
-
特点:写时复制,读操作无锁,适合读多写少场景
-
缺点:写操作性能较差,内存占用大
三. Set 接口及实现类
3.1 HashSet
-
特点:基于HashMap实现,无序,允许null元素
-
性能:添加、删除、包含操作O(1)
java
Set<String> set = new HashSet<>();
set.add("Java");
set.contains("Java"); // true
3.2 LinkedHashSet
-
特点:维护插入顺序的HashSet
-
实现:继承HashSet,底层使用LinkedHashMap
3.3 TreeSet
-
特点:基于TreeMap实现,元素有序(自然排序或Comparator)
-
性能:添加、删除、包含操作O(log n)
java
Set<Integer> sortedSet = new TreeSet<>();
sortedSet.add(3);
sortedSet.add(1); // 自动排序 [1, 3]
四. Queue/Deque 接口及实现类
4.1 PriorityQueue
-
特点:基于堆的优先级队列,元素按优先级出队
-
排序:自然排序或Comparator指定
java
Queue<Integer> pq = new PriorityQueue<>();
pq.offer(5);
pq.poll(); // 获取最小元素
4.2 ArrayDeque
-
特点:基于循环数组的双端队列,比LinkedList更高效
-
用途:可作为栈或队列使用
java
Deque<String> deque = new ArrayDeque<>();
deque.push("Java"); // 栈操作
deque.pop();
4.3 BlockingQueue (并发队列)
-
实现类:ArrayBlockingQueue, LinkedBlockingQueue
-
特点:线程安全,支持阻塞操作
五. Map 接口及实现类
5.1 HashMap
-
特点:数组+链表+红黑树(JDK8),允许null键/值
-
扩容:默认初始容量16,负载因子0.75,扩容2倍
-
哈希冲突:链表长度>8转红黑树,<6转回链表
java
Map<String, Integer> map = new HashMap<>();
map.put("Java", 1);
map.get("Java");
5.2 LinkedHashMap
-
特点:维护插入顺序或访问顺序
-
实现LRU :通过重写
removeEldestEntry
方法
java
Map<String, Integer> lruCache = new LinkedHashMap<>(16, 0.75f, true) {
protected boolean removeEldestEntry(Map.Entry eldest) {
return size() > 100;
}
};
5.3 TreeMap
-
特点:基于红黑树的有序Map,按键排序
-
性能:查询、插入、删除O(log n)
5.4 ConcurrentHashMap
-
特点:线程安全,分段锁(JDK7)或CAS+synchronized(JDK8)
-
优势:高并发性能优于Hashtable
六. 工具类 Collections
6.1 常用方法
java
Collections.sort(list); // 排序
Collections.reverse(list); // 反转
Collections.synchronizedList(list); // 线程安全包装
Collections.unmodifiableList(list); // 不可变包装
6.2 比较器 Comparator
java
list.sort(Comparator.comparing(Person::getName)
.thenComparingInt(Person::getAge));
七. 集合使用最佳实践
-
初始化容量:预估大小避免频繁扩容
-
遍历选择:
-
List:普通for(ArrayList) / 迭代器(LinkedList)
-
Set/Map:迭代器或forEach
-
-
线程安全选择:
-
低竞争:
Collections.synchronizedXxx
-
高并发:
ConcurrentHashMap
,CopyOnWriteArrayList
-
-
性能考虑:
-
随机访问多:ArrayList
-
插入删除多:LinkedList
-
快速查找:HashSet/HashMap
-
需要排序:TreeSet/TreeMap
-