Map 介面不繼承 Collection,而是以「鍵值對」形式儲存資料。本文說明 Map 核心操作、HashMap 使用範例,並示範 Java 5 泛型與增強 for 循環的現代寫法。
put(K, V) 新增/更新,get(K) 取值,containsKey()、containsValue()、remove()、size()。keySet()、values()、entrySet() 取得視圖再迭代。import java.util.HashMap;
import java.util.Map;
public class TestMap {
public static void main(String[] args) {
// 使用泛型宣告:鍵為 String,值為 Integer
Map<String, Integer> map = new HashMap<>();
map.put("a1", 1);
map.put("b2", 2);
map.put("c3", 3);
map.put("d4", 4);
map.put("e5", 5);
display(map);
System.out.println("包含鍵 c3: " + map.containsKey("c3")); // true
map.remove("c3");
System.out.println("移除後包含值 3: " + map.containsValue(3)); // false
System.out.println("大小: " + map.size()); // 4
}
// 使用增強 for 循環遍歷 keySet
public static void display(Map<String, Integer> map) {
for (String key : map.keySet()) {
System.out.println(key + " : " + map.get(key));
}
}
}
| 實作類別 | 特點 | 適用場景 |
|---|---|---|
| HashMap | 雜湊表,查詢/新增/刪除 O(1),無序,允許 null 鍵/值 | 通用高效鍵值儲存 |
| LinkedHashMap | 維護插入順序或存取順序,效能略低於 HashMap | 需保持順序的快取、LRU 實作 |
| TreeMap | 紅黑樹,鍵自然排序或自訂 Comparator,O(log n) | 需排序遍歷、範圍查詢 |
| Hashtable | 同步化、不允許 null、舊 API | 舊程式碼相容(建議用 ConcurrentHashMap) |
| ConcurrentHashMap | 分段鎖高併發,JDK 8+ 改用 CAS + synchronized | 多執行緒環境共享 Map |
// 計算或合併
map.merge("key", 1, (old, v) -> old + v); // 原子累加
map.computeIfAbsent("key", k -> expensiveDefault()); // 延遲初始化
// forEach 遍歷
map.forEach((k, v) -> System.out.println(k + "=" + v));
// 替換
map.replaceAll((k, v) -> v * 2);
Map 是 Java 處理鍵值映射的核心工具。掌握 HashMap 等實作特性、善用泛型與現代 API,能寫出高效、型別安全、可維護的程式碼。