在 Java 中操作 Map
时,高效遍历和安全删除数据可以通过以下方式实现:
一、遍历 Map 的 4 种高效方式
1. 传统迭代器(Iterator)
java
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
java
map.forEach((key, value) -> {
System.out.println(key + ": " + value);
});
3. 增强 for 循环(遍历 EntrySet)
java
for (Map.Entry<String, Integer> entry : map.entrySet()) {
String key = entry.getKey();
Integer value = entry.getValue();
// ...
}
4. Stream API(Java 8+)
java
map.entrySet().stream()
.filter(entry -> entry.getValue() > 3) // 过滤条件
.forEach(entry -> {
System.out.println(entry.getKey();
});
二、安全删除 Map 中的数据
1. 遍历时删除
java
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
java
map.entrySet().removeIf(entry -> entry.getValue() < 3);
3. 直接删除(已知 Key)
java
map.remove("key1");
三、关键注意事项
-
避免并发修改异常
遍历时直接调用
map.remove(key)
会导致ConcurrentModificationException
,必须使用Iterator.remove()
或removeIf
。 -
性能优化
- 对
HashMap
,优先遍历entrySet()
(直接获取 Key-Value)。 - 对只读操作,
forEach
和Stream
性能接近;需过滤/删除时优先用removeIf
。
- 对
-
并发场景
多线程环境下使用
ConcurrentHashMap
并结合Iterator.remove()
或原子操作。
四、完整示例代码
java
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
数据结构。