集合框架是 Java 操作對象容器的核心 API。本文從底層數據結構、核心介面體系、線程安全、工具類四個維度,建立完整選型地圖。
Iterable (根)
└─ Collection
├─ List (有序、可重複) → ArrayList, LinkedList, Vector
├─ Set (無序、不可重複) → HashSet, LinkedHashSet, TreeSet
└─ Queue (佇列) → PriorityQueue, ArrayDeque
Map (獨立體系)
├─ HashMap, LinkedHashMap, TreeMap, Hashtable
└─ ConcurrentHashMap (並發專用)
| 實現類 | 底層結構 | 有序性 | 重複性 | 線程安全 | 查詢 | 增刪 | 適用場景 |
|---|---|---|---|---|---|---|---|
| ArrayList | 動態陣列 | 插入序 | 允許 | 否 | O(1) | O(n) | 隨機訪問多、尾部增刪 |
| LinkedList | 雙向鏈表 | 插入序 | 允許 | 否 | O(n) | O(1) | 頻繁頭尾增刪、佇列/棧 |
| HashSet | HashMap (鍵) | 無序 | 不允許 | 否 | O(1) | O(1) | 去重、集合運算 |
| TreeSet | 紅黑樹 | 自然序/定製序 | 不允許 | 否 | O(log n) | O(log n) | 有序去重、區間查詢 |
| HashMap | 陣列+鏈表/紅黑樹 | 無序 | Key唯一 | 否 | O(1) | O(1) | 高頻 KV 存取 |
| TreeMap | 紅黑樹 | Key 有序 | Key唯一 | 否 | O(log n) | O(log n) | 有序 KV、範圍查詢 |
| ConcurrentHashMap | CAS+Synchronized+Node | 無序 | Key唯一 | 是 (分段/細粒度) | O(1) | O(1) | 高併發 KV |
HashSet/HashMap:hashCode() 定桶 → equals() 精確比較TreeSet/TreeMap:compareTo() 或 Comparator 返回 0 視為重複Collection 繼承 Iterable,iterator() 返回 Iterator,支援 next()/remove();ListIterator 額外支援雙向游標與 add()/set()。
for (Map.Entry<K,V> entry : map.entrySet()) { ... } // 推薦:單次查找 Entry
for (K key : map.keySet()) { V v = map.get(key); } // 避免:兩次查找
Collections / ArraysCollections.sort()、binarySearch()、reverse()、shuffle()Collections.synchronizedXxx() 包裝成線程安全版本 (性能一般,優先用並發包)Arrays.asList()、toString()、sort()、stream()Map:高併發 ConcurrentHashMap、有序 TreeMap、其他 HashMapSet:有序 TreeSet、保留插入序 LinkedHashSet、其他 HashSetArrayListLinkedList / ArrayDequeCopyOnWriteArrayList, ConcurrentLinkedQueue 等)