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

Java 集合框架 Map 詳解:HashMap、TreeMap、Hashtable 核心差異與遍歷技巧

     編輯:Java 綜合教學

Java 集合框架 Map 詳解

Map 介面建立鍵值映射關係,是處理關聯資料的核心工具。本文深度解析三大實作類別核心差異、遍歷最佳實踐與排序 Map 應用場景。

三大核心實作對比

特性HashtableHashMapTreeMap
底層結構哈希表哈希表(JDK8+ 鏈表+紅黑樹)紅黑樹(自平衡二叉搜尋樹)
允許 null鍵值均不允許允許一個 null key、多個 null value不允許 null key,允許 null value
線程安全同步(效能低)非同步(高效能)非同步
順序保證無序無序按鍵自然順序或Comparator排序
推薦場景舊版代碼兼容單執行緒高頻增刪查需有序遍歷、範圍查詢

標準遍歷方式:keySet()

Map<String, String> map = new HashMap<>();
map.put("name", "taoshihan");
map.put("age", "100");

// 方式一:keySet + get(兩次查找,稍慢)
for (String key : map.keySet()) {
    System.out.println(map.get(key));
}

// 方式二:entrySet(推薦,單次查找)
for (Map.Entry<String, String> entry : map.entrySet()) {
    System.out.println(entry.getKey() + "=" + entry.getValue());
}

// 方式三:forEach (JDK8+)
map.forEach((k, v) -> System.out.println(k + "=" + v));

TreeMap 排序實戰:自訂 Comparable

class Student implements Comparable<Student> {
    String name; int age;
    public Student(String name, int age) { this.name = name; this.age = age; }
    @Override public int compareTo(Student o) {
        return Integer.compare(this.age, o.age); // 年齡升序
    }
}

Map<Student, String> treeMap = new TreeMap<>();
treeMap.put(new Student("A", 40), "v1");
treeMap.put(new Student("B", 30), "v2");
treeMap.put(new Student("C", 50), "v3");

// 遍歷輸出按 age 升序:B(30) → A(40) → C(50)
for (Student s : treeMap.keySet()) {
    System.out.println(s.name + "=" + s.age);
}

進階補充:ConcurrentHashMap 與 LinkedHashMap

  • ConcurrentHashMap:分段鎖/CAS 實現高併發安全,JDK8+ 擴容優化,替代 Hashtable 首選。
  • LinkedHashMap:雙向鏈表維護插入順序或存取順序,適合 LRU 快取實現(覆寫 `removeEldestEntry`)。

選型決策樹

  1. 需線程安全?→ ConcurrentHashMap
  2. 需鍵有序?→ TreeMap
  3. 需保持插入/存取順序?→ LinkedHashMap
  4. 一般高效能場景?→ HashMap

精準掌握 Map 家族特性,能讓資料結構選型事半功倍,避免效能陷阱與併發 Bug。

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