Collection
├─ List (有序、可重複)
│ ├─ ArrayList (動態數組、隨機訪問快)
│ ├─ LinkedList (雙向鏈表、首尾增刪快)
│ ├─ Vector (同步舊類、不推薦新代碼用)
│ └─ Stack (Vector 子類、LIFO)
└─ Set (無序、不可重複)
├─ HashSet (HashMap 底層、O(1) 查找)
├─ LinkedHashSet (維護插入序)
└─ TreeSet (紅黑樹、有序、O(log n))
Map (鍵值對、Key 唯一)
├─ HashMap (數組+鏈表/紅黑樹、非同步)
├─ Hashtable (同步舊類、Key/Value 不可為 null)
├─ LinkedHashMap (維護插入/訪問序)
├─ TreeMap (紅黑樹、Key 有序)
└─ WeakHashMap (Key 弱引用、適合緩存)
| 集合 | 底層結構 | 線程安全 | Null 支持 | 順序性 | 典型場景 |
|---|---|---|---|---|---|
| ArrayList | 動態數組 | 否 | 是 | 插入序 | 隨機訪問、遍歷多、增刪少 |
| LinkedList | 雙向鏈表 | 否 | 是 | 插入序 | 首尾增刪多、實現 Queue/Deque |
| HashMap | 數組+鏈表/紅黑樹 | 否 | Key/Value 均可 null | 無序 | 高性能 KV 存取 |
| Hashtable | 數組+鏈表 | 是 (synchronized) | Key/Value 不可 null | 無序 | 舊代碼維護 |
| TreeMap | 紅黑樹 | 否 | Key 不可 null | Key 自然序/定製序 | 範圍查詢、有序遍歷 |
Collections.unmodifiableXxx + 非同步集合Collections.synchronizedXxx 包裝ConcurrentHashMap, CopyOnWriteArrayList, ConcurrentLinkedQueueConcurrentHashMap.computeIfAbsent 等原子方法old*3/2+1),平衡空間與拷貝頻率capacityIncrement),空間浪費大// List 首選 for-each / 索引循環
for (String s : list) { ... }
for (int i = 0; i < list.size(); i++) { ... }
// Map 三種遍歷
for (Map.Entry<K,V> e : map.entrySet()) { ... } // 推薦:單次查找同時拿 K/V
for (K k : map.keySet()) { V v = map.get(k); } // 兩次查找,稍慢
for (V v : map.values()) { ... } // 只需值
// 並發安全遍歷
ConcurrentHashMap: 直接 for-each entrySet(),弱一致性迭代器
CopyOnWriteArrayList: 直接 for-each,遍歷快照
remove() / 並發集合 / 加鎖get 取不到值查找快用 ArrayList,增刪快用 LinkedList;單線程用非同步,多線程用並發包;Key 要重寫雙方法,遍歷用 entrySet 最快。