本章系統講解 Java 容器類別體系,核心對比:**數組 vs 容器**、**Collection vs Map**、各實現類適用場景、迭代器模式、比較策略、散列機制。筆記提煉核心知識點與代碼範例,作為快速查閱手冊。
Arrays 工具類:equals()、fill()、sort()、binarySearch()、asList()。System.arraycopy() 複製引用,不複製物件本身。Object 引用,取出需強轉(基本型別需包裝類)。ClassCastException。| 介面 | 特徵 | 典型實現 | 適用場景 |
|---|---|---|---|
| List | 有序、允許重複、支援隨機存取 | ArrayList★、LinkedList | ArrayList:頻繁隨機存取;LinkedList:頻繁頭尾/中間插入刪除、棧/隊列/雙端隊列 |
| Set | 無序、不允許重複、依 equals/hashCode 判重 | HashSet★、TreeSet、LinkedHashSet | HashSet:極速查詢;TreeSet:有序集合;LinkedHashSet:保持插入順序 |
add() 語義差異:List 總是添加;Set 僅添加不存在元素。
| 實現 | 特徵 | 適用場景 |
|---|---|---|
| HashMap★ | 散列表、O(1) 查詢/插入、無序 | 通用鍵值存取,效能優先 |
| TreeMap | 紅黑樹、鍵有序、O(log n) | 需有序遍歷、範圍查詢 |
| LinkedHashMap | 散列 + 雙向鏈表、保持插入/訪問順序 | 需可預測迭代順序、LRU 快取 |
| WeakHashMap | 弱引用鍵、適合快取、GC 可回收 | 元資料註冊表、快取 |
| IdentityHashMap | 用 == 比較鍵、特殊用途 | 圖遍歷標記、序列化輔助 |
Iterator:hasNext()、next()、remove() —— 單向、輕量級。ListIterator(List 專用):雙向、可修改、可定位索引。compareTo()),類自帶排序邏輯。compare(o1,o2),可定義多種排序規則。Collections.reverseOrder() 返回反序 Comparator。equals 五大契約:自反性、對稱性、傳遞性、一致性、非空性。
hashCode 契約:
**必須同時覆寫 equals 和 hashCode** 才能作為 HashMap/HashSet 鍵/元素。
SoftReference:記憶體不足才回收,適合快取。WeakReference:GC 掃描即回收,適合 Canonicalizing Mapping。PhantomReference:最終化前通知,極少用。
需要基本型別/固定大小/最高效能 → 數組
需要自動擴容、豐富操作 → 容器
├─ 單一元素集合 → Collection
│ ├─ 需有序、可重複、隨機存取 → ArrayList
│ ├─ 需頻繁頭尾/中間增刪 → LinkedList
│ ├─ 需唯一、極速查詢 → HashSet
│ ├─ 需唯一、有序 → TreeSet
│ └─ 需唯一、保持插入順序 → LinkedHashSet
└─ 鍵值關聯 → Map
├─ 極速查詢、無序 → HashMap
├─ 鍵有序、範圍查詢 → TreeMap
└─ 保持插入/訪問順序 → LinkedHashMap
Vector、Hashtable、Stack 為 1.0/1.1 遺留,**同步開銷大、API 設計不佳**,新代碼**嚴禁使用**,改用上述現代替代品。
「容器類庫是每天都會用到的工具,掌握其選型邏輯,能寫出更簡潔、更強大、更高效的代碼。本章雖耗時長,但未動手敲代碼感覺像沒看,必須配合書上範例逐行實作才能內化。」