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

Map 遍歷的四種核心方式與效能對比

     編輯:Java 綜合教學

四種遍歷模式

Map<String, String> map = new HashMap<>();
map.put("1", "v1");
map.put("2", "v2");
map.put("3", "v3");

1. keySet + get(key) —— 最常用,但有額外查找開銷

for (String key : map.keySet()) {
    System.out.println("key=" + key + ", value=" + map.get(key));
}

每次迴圈觸發一次 get() 查找,大數據量下效能稍弱。

2. entrySet 迭代 Entry —— 推薦,單次查找獲取鍵值

for (Map.Entry<String, String> entry : map.entrySet()) {
    System.out.println("key=" + entry.getKey() + ", value=" + entry.getValue());
}

直接拿到鍵值對,無額外查找,大容量 Map 首選。

3. Iterator 遍歷 entrySet —— 等價於增強 for,但可安全刪除

Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
while (it.hasNext()) {
    Map.Entry<String, String> entry = it.next();
    System.out.println("key=" + entry.getKey() + ", value=" + entry.getValue());
    // 需刪除時:it.remove(); // 唯一安全刪除方式
}

4. values() 僅遍歷值 —— 不需要鍵時使用

for (String v : map.values()) {
    System.out.println("value=" + v);
}

效能與場景建議

方式適用場景效能可否刪除
keySet + get小 Map、代碼簡潔優先O(N) 但常數因子較大否(拋 CME)
entrySet (for-each)通用遍歷、大 Map最優否
entrySet (Iterator)遍歷中需刪除最優是 (it.remove())
values()只需值最優否

進階:Java 8+ 流式寫法

map.forEach((k, v) -> System.out.println(k + "=" + v));
map.entrySet().stream()
    .filter(e -> e.getKey().startsWith("a"))
    .forEach(e -> System.out.println(e.getKey() + "=" + e.getValue()));

結合 Stream API 可表達更複雜的篩選、轉換邏輯。

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