Java 集合框架是面試高頻考點、日常開發核心工具。本文通過清晰的層次結構圖、核心接口/類對比表、代碼實戰演示,系統梳理 Collection 體系與 Map 體系的完整架構,澄清 Collection 與 Collections 的根本區別。
| 概念 | 全稱 | 性質 | 核心作用 |
|---|---|---|---|
| Collection | java.util.Collection | 頂級接口 | 單列集合根接口,定義 add/remove/iterator 等通用契約 |
| Collections | java.util.Collections | 工具類 | 靜態方法集:排序、同步包裝、二分查找、空集合、不可變視圖等 |
一句話記住:
Collection是接口(代表一類容器),Collections是工具類(操作容器的工具箱)。

Iterable (根接口,foreach 依賴)
↑
Collection (單列集合根)
├─ List (有序、可重複、下標訪問)
│ ├─ ArrayList (動態數組,查快增刪慢)
│ ├─ LinkedList (雙向鏈表,增刪快查慢,實現 Deque)
│ └─ Vector (同步、舊遺留,Stack 基於此)
│
├─ Set (無序、不可重複)
│ ├─ HashSet (HashMap 底層,O(1),無序)
│ ├─ LinkedHashSet (鏈表維護插入序)
│ └─ TreeSet (紅黑樹,有序,O(log n))
│
└─ Queue (隊列,FIFO/優先級)
├─ PriorityQueue (堆實現,優先級隊列)
├─ ArrayDeque (循環數組,雙端隊列,非線程安全)
└─ LinkedList (也實現 Deque)
Map (雙列集合根,獨立體系)
├─ HashMap (數組+鏈表/紅黑樹,JDK 1.8 優化)
├─ LinkedHashMap (維護插入/訪問序)
├─ TreeMap (紅黑樹,有序)
├─ Hashtable (同步、舊、不允許 null)
├─ Properties (配置文件專用,繼承 Hashtable)
└─ ConcurrentHashMap (分段鎖/CAS,高併發首選)


| 實現類 | 底層結構 | 有序性 | 重複性 | Null 支持 | 線程安全 | 主要場景 |
|---|---|---|---|---|---|---|
| ArrayList | 動態數組 | 插入序 | 可重複 | 允許 | 否 | 隨機訪問多、末尾增刪 |
| LinkedList | 雙向鏈表 | 插入序 | 可重複 | 允許 | 否 | 頭尾增刪多、併發少 |
| Vector | 動態數組 | 插入序 | 可重複 | 允許 | 是 (synchronized) | 舊代碼維護,新代碼不用 |
| HashSet | HashMap | 無序 | 不可重複 | 允許一個 | 否 | 去重、集合運算 |
| LinkedHashSet | LinkedHashMap | 插入序 | 不可重複 | 允許一個 | 否 | 去重+保持插入順序 |
| TreeSet | TreeMap (紅黑樹) | 自然/定製序 | 不可重複 | 不允許 | 否 | 排序去重、範圍查詢 |
| HashMap | 數組+鏈表/紅黑樹 | 無序 | Key 不重複 | Key/Value 允許 null | 否 | 高性能 KV 存取 |
| LinkedHashMap | HashMap+雙向鏈表 | 插入/訪問序 | Key 不重複 | Key/Value 允許 null | 否 | LRU 緩存、保持順序 |
| TreeMap | 紅黑樹 | 自然/定製序 | Key 不重複 | Key 不允許 null | 否 | 有序 KV、範圍查詢 |
| Hashtable | 數組+鏈表 | 無序 | Key 不重複 | Key/Value 不允許 null | 是 (synchronized) | 舊代碼,新用 ConcurrentHashMap |
| ConcurrentHashMap | Node[]+鏈表/紅黑樹+CAS | 無序 | Key 不重複 | Key/Value 不允許 null | 高 (分段鎖/無鎖) | 高併發 KV 存取 |
package simplejava;
import java.util.*;
public class CollectionDemo {
public static void main(String[] args) {
// 1. List: 有序、可重複
List arrayList = new ArrayList<>();
arrayList.add("Program");
arrayList.add("Creek");
arrayList.add("Java");
arrayList.add("Java"); // 允許重複
System.out.println("ArrayList: " + arrayList); // [Program, Creek, Java, Java]
List linkedList = new LinkedList<>();
linkedList.addAll(arrayList);
System.out.println("LinkedList: " + linkedList); // [Program, Creek, Java, Java]
// 2. Set: 無序、去重
Set hashSet = new HashSet<>();
hashSet.addAll(arrayList);
System.out.println("HashSet: " + hashSet); // [Java, Creek, Program] 順序不固定
Set linkedHashSet = new LinkedHashSet<>();
linkedHashSet.addAll(arrayList);
System.out.println("LinkedHashSet: " + linkedHashSet); // [Program, Creek, Java] 保持插入序
Set treeSet = new TreeSet<>();
treeSet.addAll(arrayList);
System.out.println("TreeSet: " + treeSet); // [Creek, Java, Program] 自然序(字母序)
// 3. Map: Key-Value、Key 唯一
Map hashMap = new HashMap<>();
hashMap.put("Windows", "2000");
hashMap.put("Windows", "XP"); // Key 重複,值覆蓋
hashMap.put("Language", "Java");
hashMap.put("Website", "programcreek.com");
System.out.println("HashMap: " + hashMap); // {Website=programcreek.com, Windows=XP, Language=Java}
Map treeMap = new TreeMap<>();
treeMap.putAll(hashMap);
System.out.println("TreeMap: " + treeMap); // {Language=Java, Website=programcreek.com, Windows=XP} Key 自然序
// 4. Collections 工具類常用操作
List list = new ArrayList<>(Arrays.asList("c", "a", "b"));
Collections.sort(list); // 自然序排序
System.out.println("Sorted: " + list); // [a, b, c]
Collections.reverse(list);
System.out.println("Reversed: " + list); // [c, b, a]
List unmodifiable = Collections.unmodifiableList(list);
// unmodifiable.add("d"); // 拋出 UnsupportedOperationException
List synchronizedList = Collections.synchronizedList(new ArrayList<>());
// 多線程環境下安全訪問
}
}
ArrayList: [Program, Creek, Java, Java]
LinkedList: [Program, Creek, Java, Java]
HashSet: [Java, Creek, Program]
LinkedHashSet: [Program, Creek, Java]
TreeSet: [Creek, Java, Program]
HashMap: {Website=programcreek.com, Windows=XP, Language=Java}
TreeMap: {Language=Java, Website=programcreek.com, Windows=XP}
需要存儲單個元素序列?
├─ 是 → 需要去重?
│ ├─ 是 → 需要有序?
│ │ ├─ 插入序 → LinkedHashSet
│ │ └─ 排序序 → TreeSet (實現 Comparable / 傳 Comparator)
│ └─ 否 → HashSet (最高性能)
│
└─ 否 (需要 Key-Value) → 需要高併發?
├─ 是 → ConcurrentHashMap
└─ 否 → 需要有序?
├─ 插入/訪問序 → LinkedHashMap
├─ 排序序 → TreeMap
└─ 無序 → HashMap (首選)
特殊場景:
- 線程安全 List/Set/Map → Collections.synchronizedXxx() / ConcurrentHashMap / CopyOnWriteArrayList
- 不可變集合 → Collections.unmodifiableXxx() / List.of() / Set.of() / Map.of() (Java 9+)
- 基本類型集合 → Eclipse Collections / FastUtil / Guava (避免裝箱拆箱開銷)