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

Java Map 遍歷四種方式完整對比與性能分析

     編輯:Java 程式設計入門

四種遍歷模式

Map map = new HashMap<>();
map.put("1", "第一個數");
map.put("2", "第二個數");
map.put("3", "第三個數");

1. keySet + Iterator(經典)

for (Iterator it = map.keySet().iterator(); it.hasNext(); ) {
    String key = it.next();
    String value = map.get(key);
}

2. entrySet + Iterator(推薦單線程)

for (Iterator> it = map.entrySet().iterator(); it.hasNext(); ) {
    Map.Entry e = it.next();
    String key = e.getKey();
    String value = e.getValue();
}

3. keySet + 增強 for(語法糖)

for (String key : map.keySet()) {
    String value = map.get(key);
}

4. entrySet + 增強 for(最佳性能)

for (Map.Entry e : map.entrySet()) {
    String key = e.getKey();
    String value = e.getValue();
}

性能與適用性對比

JDK 8+ 函數式遍歷

map.forEach((k, v) -> System.out.println(k + "=" + v));
// 並行遍歷(大數據量)
map.entrySet().parallelStream().forEach(e -> ...);

並發環境最佳實踐

  • ConcurrentHashMap:forEach、forEachEntry 線程安全,弱一致性迭代器
  • 遍歷期間不加鎖,允許並發修改
  • 需強一致性:鎖定整個 Map 或複製快照遍歷

常見陷阱

  • for-each 循環中調用 map.remove(key) → ConcurrentModificationException
  • HashMap 非線程安全,多線程寫入導致死循環或數據丟失
  • entrySet 視圖隨 Map 變化,遍歷時勿修改結構
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
方式鍵查找次數可讀性線程安全推薦場景
keySet + IteratorN 次 get()中需手動同步需刪除鍵時
entrySet + Iterator0 次中需手動同步只讀遍歷、需刪除
keySet + for-eachN 次 get()高不可修改結構簡單只讀
entrySet + for-each0 次高不可修改結構通用最佳