Java 集合框架是面試高頻考點,也是日常開發最基礎的工具箱。本文通過**手繪類圖邏輯**,梳理集合體系核心接口繼承鏈、核心實現類特性對比、迭代器模式精髓、工具類妙用,構建清晰知識骨架。
Iterable (根接口)
│
├── Collection
│ ├── List (有序、可重複)
│ │ ├── ArrayList (動態數組,查快增刪慢)
│ │ ├── LinkedList (雙向鏈表,增刪快查慢,可作隊列/棧)
│ │ └── Vector (同步、舊API、擴容 2倍)
│ │
│ ├── Set (無序、唯一)
│ │ ├── HashSet (HashMap 鍵值對,無序、允許 null)
│ │ ├── LinkedHashSet (鏈表維護插入順序)
│ │ └── TreeSet (紅黑樹,有序、無 null、元素需 Comparable)
│ │
│ └── Queue (隊列)
│ ├── PriorityQueue (堆、優先級)
│ ├── ArrayDeque (雙端隊列、非同步、性能優於 Stack)
│ └── BlockingQueue (併發:LinkedBlockingQueue, ArrayBlockingQueue...)
│
└── Map (鍵值對、Key 唯一)
├── HashMap (數組+鏈表/紅黑樹,非同步、允許 null key/value)
├── LinkedHashMap (維護插入/訪問順序)
├── Hashtable (同步、不允許 null、擴容 2n+1、舊API)
├── TreeMap (紅黑樹、Key 有序、無 null key)
├── ConcurrentHashMap (JDK7 分段鎖、JDK8 CAS+synchronized+紅黑樹、高併發)
└── WeakHashMap (Key 弱引用、GC 可回收、緩存場景)
iterator(),職責是**工廠方法**,每次調用返回**全新**的 Iterator 實例,保證多次遍歷互不干擾。hasNext()、next()、remove(),攜帶**遍歷狀態**(游標位置)。// 正確遍歷並刪除模式
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String s = it.next();
if ("delete".equals(s)) it.remove(); // 唯一安全刪除方式
}
AbstractList.listIterator())add(E)、previous()、hasPrevious()、nextIndex()、previousIndex()、set(E)ListIterator<String> it = list.listIterator(list.size()); // 從尾部開始
while (it.hasPrevious()) {
System.out.println(it.previous()); // 逆序輸出
}
| 類別 | 底層結構 | 順序 | 重複 | Null | 線程安全 | 典型場景 |
|---|---|---|---|---|---|---|
| ArrayList | 動態數組 | 插入序 | 允許 | 允許 | 否 | 隨機訪問多、末尾增刪 |
| LinkedList | 雙向鏈表 | 插入序 | 允許 | 允許 | 否 | 頻繁頭尾/中間增刪、隊列棧 |
| HashSet | HashMap(Key) | 無序 | 不允許 | 允許 1個 | 否 | 去重、快速存在性判斷 |
| TreeSet | TreeMap(Key) | 自然序/定制序 | 不允許 | 不允許 | 否 | 有序去重、範圍查詢 |
| HashMap | 數組+鏈表/紅黑樹 | 無序 | Key唯一 | 允許 1K/多V | 否 | 通用 KV 存儲、緩存 |
| Hashtable | 數組+鏈表 | 無序 | Key唯一 | 全不允許 | 是(粗鎖) | 舊代碼兼容、極少用 |
| ConcurrentHashMap | JDK7 Segment[]、JDK8 Node[]+CAS+syn | 無序 | Key唯一 | 全不允許 | 是(細粒度) | 高併發 KV 存儲、計數器 |
sort()、shuffle()、reverse()、synchronizedXxx() (包裝同步視圖)、unmodifiableXxx() (不可變視圖)、binarySearch()、max/min()、frequency()、disjoint()sort()、binarySearch()、copyOf()、copyOfRange()、asList() (定長 List)、stream()、parallelSort() (JDK 8+)、mismatch() (JDK 9+)new ArrayList<>(100)、new HashMap<>(128) 避免擴容抖動。List<String> list = new ArrayList<>() 利於重構。ConcurrentHashMap、CopyOnWriteArrayList (讀多寫少)、ConcurrentLinkedQueue。ConcurrentModificationException。Arrays.asList() 返回定長 List,增刪拋 UnsupportedOperationException,需 new ArrayList<>(Arrays.asList(...))。Java 集合框架以 **Iterable/Collection/Map** 為骨架,**ArrayList/HashMap/ConcurrentHashMap** 為主力實戰類。**理解底層結構(數組/鏈表/紅黑樹/哈希桶)、線程安全機制(無鎖/粗鎖/細粒度鎖/CAS)、順序語義(無序/插入序/自然序)**,即可在海量場景中精準選型、高效排錯、優雅重構。建議將本文類圖邏輯轉為腦圖,掛在工位牆上,需要時一瞥即得。