在 Java 中操作 Map
時,高效遍歷和安全刪除數據可以通過以下方式實現:
一、遍歷 Map 的 4 種高效方式
1. 傳統迭代器(Iterator)
Map<String, Integer> map = new HashMap<>();
map.put("key1", 5);
map.put("key2", 3);Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {Map.Entry<String, Integer> entry = iterator.next();String key = entry.getKey();Integer value = entry.getValue();System.out.println(key + ": " + value);
}
2. Java 8+ forEach + Lambda
map.forEach((key, value) -> {System.out.println(key + ": " + value);
});
3. 增強 for 循環(遍歷 EntrySet)
for (Map.Entry<String, Integer> entry : map.entrySet()) {String key = entry.getKey();Integer value = entry.getValue();// ...
}
4. Stream API(Java 8+)
map.entrySet().stream().filter(entry -> entry.getValue() > 3) // 過濾條件.forEach(entry -> {System.out.println(entry.getKey();});
二、安全刪除 Map 中的數據
1. 遍歷時刪除
Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {Map.Entry<String, Integer> entry = iterator.next();if (entry.getValue() < 3) {iterator.remove();}
}
2. Java 8+ removeIf
map.entrySet().removeIf(entry -> entry.getValue() < 3);
3. 直接刪除(已知 Key)
map.remove("key1");
三、關鍵注意事項
-
避免并發修改異常
遍歷時直接調用map.remove(key)
會導致ConcurrentModificationException
,必須使用Iterator.remove()
或removeIf
。 -
性能優化
- 對
HashMap
,優先遍歷entrySet()
(直接獲取 Key-Value)。 - 對只讀操作,
forEach
和Stream
性能接近;需過濾/刪除時優先用removeIf
。
- 對
-
并發場景
多線程環境下使用ConcurrentHashMap
并結合Iterator.remove()
或原子操作。
四、完整示例代碼
Map<String, Integer> map = new HashMap<>(Map.of("key1", 5,"key2", 3,"key3", 2
));// 遍歷并刪除 value < 3
map.entrySet().removeIf(entry -> entry.getValue() < 3);// 輸出結果:{key1=5, key2=3}
System.out.println(map);
通過上述方法,可以高效且安全地操作 Java 中的 Map
數據結構。