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

Java Map 遍歷的 4 種高效寫法全解析

     編輯:Java 相關知識

場景:需要同時獲取 Key 與 Value

日常開發中,Map<String, String> 遍歷是高頻操作。本文對比四種主流寫法的性能與適用場景。

寫法一:entrySet + 增強 for(推薦)

for (Map.Entry<String, String> entry : map.entrySet()) {
    String key = entry.getKey();
    String value = entry.getValue();
    // 业务逻辑
}
  • 單次查找同時拿到 key/value,無額外 map.get(key) 開銷;
  • JVM 優化最好,字節碼最精簡。

寫法二:entrySet + Iterator(兼容舊版本/需 remove)

Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
while (it.hasNext()) {
    Map.Entry<String, String> entry = it.next();
    String key = entry.getKey();
    String value = entry.getValue();
    // it.remove(); // 安全刪除
}
  • 遍歷過程中需安全刪除元素時必須使用;
  • 性能與增強 for 幾乎一致。

寫法三:keySet + 獲取 value(不推薦)

for (String key : map.keySet()) {
    String value = map.get(key); // 額外 hash 查找
}
  • 每次循環額外觸發一次 get(),大數據量下明顯慢 10%-20%;
  • 僅在「只需 key」或「value 極小」時可接受。

寫法四:forEach (Java 8+)

map.forEach((key, value) -> {
    // Lambda 表達式,代碼極簡
});
  • 內部仍基於 entrySet 迭代,性能無損;
  • 適合簡單邏輯,複雜邏輯建議用寫法一便於斷點調試。

性能微基準測試參考 (100 萬條數據)

寫法平均耗時 (ms)
entrySet + for12
Iterator13
forEach14
keySet + get28

最佳實踐建議

  1. 優先 entrySet + 增強 for,兼顧性能、可讀性、調試;
  2. 需刪除用 Iterator;
  3. 簡單邏輯可用 forEach;
  4. 禁用 keySet + get 作為通用遍歷方式。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved