Java代码如何循环安全删除map呢?
下文笔者讲述java代码循环安全删除map中元素的方法及示例分享,如下所示
循环安全删除map的实现思路
方式1:
Iterator 安全
直接操作原HashMap 代码稍显冗长 需要直接修改原 HashMap
方式2:
removeIf
适合Java 8+需要Java 8
或
更高版本
需要直接修改原HashMap
方式3:
记录键后删除
无需Iterator需要额外空间
效率较低 不推荐
方式4:
函数式风格
生成新HashMap需要额外空间
生成新对象
需要保留原HashMap
使用Iterator删除
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class Main {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
// 使用 Iterator 遍历并删除
Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, Integer> entry = iterator.next();
if (entry.getValue() == 2) { // 删除值为 2 的条目
iterator.remove(); // 安全删除
}
}
System.out.println(map); // 输出: {A=1, C=3}
}
}
代码说明
使用iterator.remove() 方法删除当前的数据
并不是直接操作HahsMap
这种方法不会引发ConcurrentModificationException 报错
使用removeIf(Java 8+)
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
// 使用 removeIf 删除符合条件的条目
map.entrySet().removeIf(entry -> entry.getValue() == 2);
System.out.println(map); // 输出: {A=1, C=3}
}
}
代码说明
removeIf是Collection接口方法
HashMap的entrySet()返回一个集合
因此可以直接使用
代码更简洁
适合Java 8及以上版本
遍历时记录需要删除的键(不推荐)
当你
不想使用Iterator
或
removeIf
可以先记录需要删除的键
然后再统一删除
这种方式不推荐,因为需要额外的空间。
例
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
public class Main {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
// 记录需要删除的键
Set<String> keysToRemove = new HashSet<>();
for (Map.Entry<String, Integer> entry : map.entrySet()) {
if (entry.getValue() == 2) {
keysToRemove.add(entry.getKey());
}
}
// 统一删除
for (String key : keysToRemove) {
map.remove(key);
}
System.out.println(map); // 输出: {A=1, C=3}
}
}
代码说明
需要额外的集合(如 HashSet)来存储需要删除的键。
不推荐,因为代码冗长且效率较低。
使用Stream(Java 8+)删除map对象
如果习惯使用函数式编程风格 可使用Stream来过滤 并生成新HashMap例
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
// 使用 Stream 过滤并生成新的 HashMap
Map<String, Integer> filteredMap = map.entrySet()
.stream()
.filter(entry -> entry.getValue() != 2)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
System.out.println(filteredMap); // 输出: {A=1, C=3}
}
}
代码说明
使用 Stream过滤数据
并生成一个新HashMap
适合需要保留原HashMap场景
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


