JDK 1.6 集合框架結構清晰,掌握核心介面與實現類的繼承/實現關係,能讓你在業務場景中精準選型,避免濫用 Vector、Hashtable 等舊類。
HashSet:無序、唯一、非線程安全,基於 HashMap,O(1) 查找。LinkedHashSet:維護插入順序,適合「去重且保序」場景。TreeSet:有序(自然序/比較器),基於紅黑樹,O(log n)。EnumSet:枚舉專用,位向量實現,極致高效。
ArrayList:動態數組,隨機訪問快,擴容代價大,**首選**。LinkedList:雙向鏈表,首尾增刪 O(1),隨機訪問 O(n),適合佇列/棧。Vector:同步開銷大,單線程用 ArrayList,多線程用 Collections.synchronizedList 或 CopyOnWriteArrayList。
HashMap:主力實現,JDK 8+ 鏈表轉紅黑樹抗攻擊。LinkedHashMap:保序(插入序/訪問序),LRU 快取首選。TreeMap:有序鍵,範圍查詢利器。WeakHashMap:鍵弱引用,適合緩存場景。IdentityHashMap:用 == 比較鍵,特殊用途。Hashtable:同步粒度粗,改用 ConcurrentHashMap。
PriorityQueue:優先級佇列,堆實現。ArrayDeque:雙端佇列,數組循環,比 LinkedList 更快,無容量限制。ConcurrentLinkedQueue:無鎖佇列,高併發生產消費。BlockingQueue 系列:ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue、DelayQueue 等,線程協調利器。
| 場景 | 推薦類 | 避坑提示 |
|---|---|---|
| 去重、集合運算 | HashSet | 需有序用 LinkedHashSet/TreeSet |
| 頻繁首尾操作、佇列/棧 | ArrayDeque / LinkedList | 隨機訪問用 ArrayList |
| 鍵值存儲、高併發 | ConcurrentHashMap | 勿用 Hashtable/同步 HashMap |
| 鍵需排序、範圍查詢 | TreeMap | 大數據量考慮 B+ 樹外部庫 |
| 緩存、鍵可回收 | WeakHashMap | 非弱引用場景勿用 |
| 生產者消費者 | BlockingQueue 子類 | 根據有界/無界、延遲選型 |
內化這張圖譜與決策表,集合選型不再靠猜,代碼質量與性能雙提升。