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

Java Map 三種遍歷方式詳解與效能比較

     編輯:Java 程式設計入門

遍歷 Map 是日常開發中極高頻的操作。Java 提供了多種遍歷路徑,各有適用場景與效能差異。本文整理三種主流寫法,並附上可直接執行的範例程式碼。

範例環境準備

Map map = new HashMap<>();
map.put("1001", new Student("宋江", "1001", 38));
map.put("1002", new Student("盧俊義", "1002", 35));
map.put("1003", new Student("吳用", "1003", 34));
// ... 略

方式一:遍歷 Values(僅需值)

public static void work(Map map) {
    Collection values = map.values();
    Iterator it = values.iterator();
    while (it.hasNext()) {
        System.out.println(it.next());
    }
}

優點:語法簡單,適合「只關心值、不需要鍵」的場景。
缺點:無法獲取鍵,若後續需根據鍵操作則不適用。

方式二:遍歷 KeySet(需鍵取值)

public static void workByKeySet(Map map) {
    Set keySet = map.keySet();
    for (Iterator it = keySet.iterator(); it.hasNext(); ) {
        String key = it.next();
        System.out.println(map.get(key));
    }
}

優點:可同時獲取鍵與值,靈活度高。
缺點:每次迭代需額外呼叫 map.get(key),有輕微效能開銷。

方式三:遍歷 EntrySet(推薦,最高效)

public static void workByEntry(Map map) {
    Set> entrySet = map.entrySet();
    for (Iterator> it = entrySet.iterator(); it.hasNext(); ) {
        Map.Entry entry = it.next();
        System.out.println(entry.getKey() + "--->" + entry.getValue());
    }
}

優點:一次迭代直接拿到鍵值對,避免二次查找,效能最佳。
適用:需同時處理鍵與值的大多數業務場景。

Java 8+ 現代寫法補充

// Lambda 簡潔風格
map.forEach((k, v) -> System.out.println(k + "=" + v));

// Stream API 處理複雜邏輯
map.entrySet().stream()
   .filter(e -> e.getValue().getAge() > 30)
   .forEach(e -> System.out.println(e.getKey() + ":" + e.getValue()));

總結建議

場景推薦方式
僅需值values() / forEach
需鍵值對、高頻遍歷entrySet()
需對鍵單獨操作(如刪除)keySet() 配合 Iterator.remove()
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved