集合體系宏觀視圖
Collection 接口雙雄:List(有序、可重複)與 Set(無序、唯一)。Map 獨立體系(鍵值對、鍵唯一)。掌握核心實現類的數據結構特性,是高效編程的基石。
一、List 族群
| 實現類 | 底層結構 | 線程安全 | 核心特性 | 適用場景 |
| ArrayList | 動態數組 | ❌ | 隨機訪問 O(1),擴容 1.5倍,尾插摊還 O(1) | 默認首選,讀多寫少、需下標訪問 |
| LinkedList | 雙向鏈表 | ❌ | 頭尾增刪 O(1),實現 Deque/Queue,遍歷緩存不友好 | 頻繁頭尾/中間增刪、作為隊列棧 |
| Vector | 動態數組 | ✅ (synchronized) | 擴容 2倍,性能差,被 ArrayList + 同步包裝取代 | 遺留代碼維護,新代碼勿用 |
| CopyOnWriteArrayList | 數組+寫時復制 | ✅ (無鎖讀) | 讀完全無鎖,寫入復制數組,適合讀極多寫極少 | 事件監聽器列表、白名單配置 |
List 高頻 API
add(E e) / add(int index, E element) // 添加
get(int index) // 隨機訪問
set(int index, E element) // 替換
remove(int index) / remove(Object o) // 刪除
indexOf / lastIndexOf // 查找位置
subList(int from, int to) // 視圖切片(修改影響原列表)
toArray() / toArray(T[] a) // 轉數組
二、Set 族群
| 實現類 | 底層結構 | 有序性 | 線程安全 | 核心特性 |
| HashSet | HashMap (散列表) | 無序 | ❌ | 增刪查 O(1),依賴 hashCode/equals |
| LinkedHashSet | HashMap + 雙向鏈表 | 插入序/訪問序 | ❌ | 保持插入順序,遍歷有序 |
| TreeSet | 紅黑樹 (NavigableMap) | 自然序/定製序 | ❌ | 有序、範圍查詢 O(log n),元素需 Comparable/Comparator |
| CopyOnWriteArraySet | CopyOnWriteArrayList | 插入序 | ✅ | 讀無鎖,寫復制 |
Set 高頻 API
add(E e) / addAll(Collection c) // 添加(去重)
remove(Object o) / removeAll / retainAll // 刪除/差集/交集
contains(Object o) // 判斷包含
iterator() / spliterator() // 遍歷
三、Map 族群
| 實現類 | 底層結構 | 有序性 | 線程安全 | 核心特性 |
| HashMap | 數組+鏈表/紅黑樹 (JDK8) | 無序 | ❌ | JDK8 鏈表轉樹優化,默認負載因子 0.75,擴容 2倍 |
| LinkedHashMap | HashMap + 雙向鏈表 | 插入序/訪問序 | ❌ | LRU 緩存基石 |
| TreeMap | 紅黑樹 | 自然序/定製序 | ❌ | 有序鍵、範圍查詢 |
| Hashtable | 數組+鏈表 | 無序 | ✅ (synchronized) | 性能差,被 ConcurrentHashMap 取代 |
| ConcurrentHashMap | 分段鎖 (JDK7) / CAS+synchronized (JDK8) | 無序 | ✅ (高並發) | 高並發首選,JDK8 擴容並行化 |
Map 高頻 API
put(K, V) / putIfAbsent / computeIfAbsent // 添加/條件添加
get(Object key) / getOrDefault // 獲取
remove(Object key) / replace // 刪除/替換
keySet() / values() / entrySet() // 視圖集合
forEach / merge / compute // JDK8 函數式操作
四、工具類:Arrays、Collections、Iterator
- Arrays:
asList(定長列表)、sort(雙軸快排/歸併)、binarySearch(有序前提)、copyOf、stream。
- Collections:
sort/shuffle/reverse/fill、synchronizedXxx(同步包裝)、unmodifiableXxx(不可變視圖)、max/min/frequency、binarySearch(List, key)。
- Iterator:
hasNext/next/remove(唯一安全刪除方式),ListIterator 增加 previous/add/set 支持雙向修改。
- System.arraycopy:原生數組高效複製,
ArrayList 擴容/插刪底層依賴它。
選型決策樹(簡化版)
需要鍵值對? → Map
├─ 高並發 → ConcurrentHashMap
├─ 需有序 → TreeMap / LinkedHashMap
└─ 一般 → HashMap
不需要鍵值對? → Collection
├─ 需去重 → Set
│ ├─ 需有序 → LinkedHashSet / TreeSet
│ └─ 一般 → HashSet
└─ 可重複 → List
├─ 頻繁隨機訪問 → ArrayList
├─ 頻繁頭尾增刪 → LinkedList / ArrayDeque
└─ 讀多寫極少 → CopyOnWriteArrayList