java.util.Map 是「鍵值對」映射的頂層抽象,不繼承 Collection,但提供三種集合視圖:
keySet():Key 集合(Set,無重複)values():Value 集合(Collection,可重複)entrySet():Key-Value 對集合(Set<Map.Entry<K,V>>)
Map<Object, Object> map = new HashMap<>();
// 1. 基本增刪改查
map.put("id", "123");
map.put("name", "xyz");
map.put(1, new Object());
map.put(new HashSet<>(Arrays.asList(111,222)), new ArrayList<>(Arrays.asList(333,444)));
// 2. 狀態檢查
map.isEmpty(); // false
map.size(); // 4
map.containsKey("name"); // true
map.containsValue(list); // true
// 3. 覆蓋語義
Object old = map.put("id", "456"); // 返回舊值 "123"
// 4. 刪除操作
map.remove(key); // 返回被刪 Value
map.clear(); // 清空
// 5. EntrySet 進階操作(視圖與原 Map 互通)
Set<Map.Entry<Object,Object>> entries = map.entrySet();
Iterator<Map.Entry<Object,Object>> it = entries.iterator();
if (it.hasNext()) {
Map.Entry<Object,Object> e = it.next();
System.out.println(e.getKey() + "=" + e.getValue());
it.remove(); // 安全移除,同步影響原 Map
}
| 實現類 | 特性 | 適用場景 |
|---|---|---|
| HashMap | 雜湊表、無序、非同步、允許 null | 通用高效能映射,單執行緒 |
| LinkedHashMap | 維護插入/訪問順序 | LRU 快取、需保持順序遍歷 |
| TreeMap | 紅黑樹、Key 有序(自然序/Comparator) | 範圍查詢、有序遍歷 |
| Hashtable | 同步、拒絕 null、舊版 | 遺留代碼維護,新代碼勿用 |
| ConcurrentHashMap | 分段鎖/CAS、高並發、弱一致性迭代器 | 多執行緒共享映射(首選) |
| IdentityHashMap | 用 == 比較 Key、非通用 | 特殊場景(如物件圖遍歷標記) |
| 分類 | 方法 | 說明 |
|---|---|---|
| 查詢 | get(Object key) | 返回 Value,無則 null |
containsKey(Object key) | Key 是否存在 | |
containsValue(Object value) | Value 是否存在(O(n)) | |
getOrDefault(key, defaultVal) | JDK 8+,簡化空判斷 | |
| 修改 | put(K key, V value) | 存入/覆蓋,返回舊值 |
putIfAbsent(key, value) | JDK 8+,Key 不存在才存入 | |
remove(Object key) | 刪除 Key,返回舊值 | |
replace(key, value) | Key 存在才替換 | |
| 批量 | putAll(Map<? extends K, ? extends V> m) | 合併另一 Map |
clear() | 清空所有映射 | |
entrySet()/keySet()/values() | 獲取集合視圖 | |
| 計算 (JDK 8+) | computeIfAbsent(key, mappingFunction) | 缺失時計算並存入 |
computeIfPresent(key, remappingFunction) | 存在時重新計算 | |
merge(key, value, remappingFunction) | 合併新值(如計數器) |
equals()/hashCode(),且放入後不可變更相關欄位。map.remove(),必須用 Iterator.remove() 或 JDK 8 removeIf()。containsValue() 是 O(n),大數據量避免頻繁調用。new HashMap<>(expectedSize)。Collections.synchronizedMap() 或 Hashtable。Map 是 Java 處理「關聯式數據」的核心工具。掌握三大視圖、核心 API、實現類選型、Key 不變性約束、JDK 8 函數式增強,能讓你在業務開發、系統設計、面試中遊刃有餘。