首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 進階教程:Map 介面核心概念與通用操作指南

     編輯:Java 相關知識

Map 介面核心定位

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)合併新值(如計數器)

避坑指南

  1. Key 必須正確實現 equals()/hashCode(),且放入後不可變更相關欄位。
  2. 不要在迭代中直接調用 map.remove(),必須用 Iterator.remove() 或 JDK 8 removeIf()。
  3. containsValue() 是 O(n),大數據量避免頻繁調用。
  4. 預估大小指定初始容量,減少擴容開銷:new HashMap<>(expectedSize)。
  5. 多執行緒用 ConcurrentHashMap,不要用 Collections.synchronizedMap() 或 Hashtable。

總結

Map 是 Java 處理「關聯式數據」的核心工具。掌握三大視圖、核心 API、實現類選型、Key 不變性約束、JDK 8 函數式增強,能讓你在業務開發、系統設計、面試中遊刃有餘。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved