java.util.Map 是鍵值對集合,不允許重複鍵。常用實作:
public class Emp {
private String eId;
private String eName;
public Emp(String eId, String eName) { this.eId = eId; this.eName = eName; }
// Getter/Setter 省略
@Override public String toString() { return eId + "=" + eName; }
}
public class MapDemo {
public static void main(String[] args) {
Map<String, String> hashMap = new HashMap<>();
hashMap.put("001", "張三");
hashMap.put("002", "李四");
hashMap.put("005", "王五");
hashMap.put("006", "馬六");
System.out.println("=== HashMap (無序) ===");
hashMap.forEach((k, v) -> System.out.println(k + " -> " + v));
// TreeMap 自動按鍵自然順序 (字串字典序) 排序
Map<String, String> treeMap = new TreeMap<>(hashMap);
System.out.println("\n=== TreeMap (有序) ===");
treeMap.forEach((k, v) -> System.out.println(k + " -> " + v));
// 刪除操作
hashMap.remove("005");
treeMap.remove("005");
System.out.println("\n刪除 005 後 HashMap: " + hashMap);
System.out.println("刪除 005 後 TreeMap: " + treeMap);
}
}
=== HashMap (無序) ===
001 -> 張三
002 -> 李四
005 -> 王五
006 -> 馬六
=== TreeMap (有序) ===
001 -> 張三
002 -> 李四
005 -> 王五
006 -> 馬六
刪除 005 後 HashMap: {001=張三, 002=李四, 006=馬六}
刪除 005 後 TreeMap: {001=張三, 002=李四, 006=馬六}

hash(key) ^ (hash(key) >>> 16) 減少碰撞Comparable 或提供 ComparatorfirstKey(), lastKey(), subMap(), headMap(), tailMap() 等範圍操作| 場景 | 推薦 | 理由 |
|---|---|---|
| 高頻存取、不需排序 | HashMap | O(1) 效能最佳 |
| 需按鍵排序、範圍查詢 | TreeMap | 有序、支援 NavigableMap API |
| 需保持插入順序 | LinkedHashMap | 雙向鏈表維護順序 |
| 多執行緒高併發 | ConcurrentHashMap | 分段鎖/CAS,效能遠優於 Hashtable |
| 鍵為 Enum | EnumMap | 陣列底層,極致效能 |
equals/hashCode 的欄位,會導致找不到原值。new HashMap<>(1024) 避免頻繁擴容。Serializable 才能序列化。