經過第 38 至 54 節的深度剖析,我們已系統探討了 Java 集合框架的主流容器類。本節將從「用法特點、底層數據結構與算法、設計思維與模式」三大維度進行總結性回顧,幫助構建完整的知識體系。

Java 容器類以兩大根接口 Collection(單列集合)與 Map(鍵值對集合)為核心衍生:
ArrayList(動態數組,隨機訪問快,增刪慢)vs LinkedList(雙向鏈表,增刪快,隨機訪問慢)。HashSet(哈希表,高效無序)、LinkedHashSet(維護插入序)、TreeSet(紅黑樹,自然序/定製序)、EnumSet(位向量,極致效能)。ArrayDeque(循環數組,首選實現)、LinkedList、PriorityQueue(堆實現,優先級隊列,解決 TopK、中位數等問題)。Collections.synchronizedXxx 或並發包(ConcurrentHashMap 等)。ConcurrentModificationException,增刪必須用迭代器自身方法。Map<Date, Map<Category, List<News>>> 建模多維數據。容器類是經典數據結構的工程化實踐:
ArrayList、HashMap 桶數組、ArrayDeque、PriorityQueue 堆存儲。擴容策略平衡內存與拷貝開銷(通常 1.5~2 倍)。LinkedList 雙向鏈表、HashMap 同桶鏈表、LinkedHashMap 全局雙向鏈表。HashMap、HashSet、LinkedHashMap/Set 核心。哈希算法追求快速、均勻分佈。TreeMap/Set 底層,自平衡保證 O(logN) 增刪查,有序性強。PriorityQueue 底層,邏輯樹+物理數組,O(logN) 維護極值,解決 TopK/中位數難題。ArrayDeque 頭尾指針環繞,O(1) 入隊出隊。EnumSet 位運算,集合運算極致高效。Collections 工具類封裝二分查找、排序(TimSort)、打亂、旋轉等通用算法,並根據容器大小與 RandomAccess 接口動態選擇最優實現。
集合框架是 Java 設計精髓的縮影:
Collection → List/Set/Queue)、抽象類模板方法(AbstractList/Set/Map/Queue)復用代碼,規範子類契約。HashSet 組合 HashMap、TreeSet 組合 TreeMap,適配器/裝飾器模式同理。List 而非 ArrayList),降低耦合,利於替換實現。iterator())、適配器(Collections.list() 轉 Enumeration)、裝飾器(synchronizedList()、unmodifiableList())。| 場景 | 推薦容器 | 理由 |
|---|---|---|
| 高頻隨機訪問、少量增刪 | ArrayList | 數組連續內存,CPU 緩存友好 |
| 首尾頻繁增刪、併發低 | ArrayDeque | 循環數組 O(1) 操作,無 GC 壓力 |
| 去重、高頻查重 | HashSet | 哈希表 O(1) 含性判斷 |
| 需保持插入序、去重 | LinkedHashSet | 鏈表維序 + 哈希查重 |
| 鍵值映射、高頻查找 | HashMap | 哈希表 O(1) 核心操作 |
| 鍵需有序、範圍查詢 | TreeMap | 紅黑樹有序性 |
| LRU 緩存實現 | LinkedHashMap | accessOrder=true + removeEldestEntry |
| 優先級任務調度 | PriorityQueue | 堆 O(logN) 取極值 |
| 枚舉類型集合操作 | EnumSet/EnumMap | 位向量/數組,極致效能 |
Java 容器類不僅是工具庫,更是數據結構、算法策略、OOP 原則與設計模式的綜合教科書。掌握其底層原理與選型邏輯,是寫出高性能、可維護代碼的關鍵。容器篇告一段落,下一站我們將進入 文件 I/O 與 NIO 領域,探索數據持久化與網絡傳輸的核心機制。
更多系列文章請關注微信公眾號 「老馬說編程」,從入門到高級,深入淺出,一起探索 Java 編程本質。
