Java 集合框架中,Map 系列接口與類構成了鍵值對存儲的核心體系。理解其架構層次、接口職責分工與實現類特性,是選型與優化的基石。本文梳理從 Map 到 NavigableMap 的完整繼承鏈,並對比主流實現類的適用場景。
Map (Interface)
↑
AbstractMap (Abstract Class)
↑ ↑ ↑
HashMap TreeMap WeakHashMap
↑
SortedMap (Interface)
↑
NavigableMap (Interface)
↑
TreeMap (實現類)
另一條線:
Dictionary (Legacy Abstract Class)
↑
Hashtable (實現 Map、可同步、可 Enumeration)
keySet()、values()、entrySet()。HashMap 無序,TreeMap 有序)。Map 參數構造(複製構造)。代表單個鍵值對,提供 getKey()、getValue()、setValue()、equals()、hashCode()。entrySet() 返回 Set<Map.Entry>,是遍歷與操作條目的基礎。
Map 大部分非抽象方法(clear、containsKey、putAll 等)。entrySet() 即可得到不可修改 Map;實現 put 與迭代器 remove 即可得到可修改 Map。clone()、toString() 等通用實現。Map,鍵按自然順序或指定 Comparator排序。Comparable 或被 Comparator 接受。firstKey()、lastKey()、headMap()、tailMap()、subMap()。繼承 SortedMap,提供「最近匹配」導航能力,功能分四類:
| 類別 | 代表方法 | 語義 |
|---|---|---|
| 鍵值對導航 | lowerEntry、floorEntry、ceilingEntry、higherEntry | 返回 <、≤、≥、> 給定鍵的鍵值對 |
| 首尾獲取/移除 | firstEntry、pollFirstEntry、lastEntry、pollLastEntry | 獲取並可選移除最小/最大映射 |
| 鍵導航 | lowerKey、floorKey、ceilingKey、higherKey | 同理僅返回鍵 |
| 視圖與子集 | descendingMap、navigableKeySet、descendingKeySet、headMap/tailMap/subMap(含 inclusive 參數) | 反序視圖、帶邊界控制的子映射 |
JDK 1.0 產物,功能與 Map 類似但僅支持 Enumeration 遍歷。Hashtable 繼承它並實現 Map,雙重身份導致 API 冗餘,現已不建議新代碼使用。
| 實現類 | 底層結構 | 順序 | 線程安全 | Null 鍵/值 | 典型場景 |
|---|---|---|---|---|---|
| HashMap | 數組+鏈表/紅黑樹 | 無序 | 否 | 允許/允許 | 通用高性能鍵值存儲 |
| LinkedHashMap | HashMap + 雙向鏈表 | 插入序/訪問序 | 否 | 允許/允許 | 需保持順序的緩存、LRU |
| TreeMap | 紅黑樹 | 鍵自然序/Comparator 序 | 否 | 不允許 key 為 null | 範圍查詢、有序遍歷 |
| Hashtable | 數組+鏈表 | 無序 | 是(synchronized) | 不允許/不允許 | 遺留代碼、已被 ConcurrentHashMap 取代 |
| WeakHashMap | 數組+鏈表(弱引用 Key) | 無序 | 否 | 允許/允許 | 緩存、元數據映射,Key 可被 GC 回收 |
| ConcurrentHashMap | 數組+鏈表/紅黑樹+CAS/synchronized | 無序 | 是(高併發) | 不允許/不允許 | 高併發場景首選 |
HashMap(默認首選)。LinkedHashMap。TreeMap(實現 NavigableMap)。ConcurrentHashMap。WeakHashMap。Hashtable/Dictionary 差異,新代碼禁用。Map 定義契約,AbstractMap 縮減樣板代碼。SortedMap 引入順序,NavigableMap 賦能導航與範圍操作。TreeMap 是唯一同時實現 NavigableMap、SortedMap、Map 的標準實現,基於紅黑樹保證 O(log n) 操作複雜度。HashMap 以 O(1) 平均複雜度服務海量無序場景,JDK 8 引入紅黑樹退化防禦。Map/SortedMap/NavigableMap,具體實現類在構造時注入。