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场景
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。