当前位置: 首页 > news >正文

Java 之 Map遍历并删除的几种方法对比

目录

方法一:使用 Iterator

方法二:使用 Java 8 的 removeIf 方法

方法三:使用 for-each 循环和临时集合

方法四:使用 Map 的 entrySet 和 remove 方法

总结


在Java中,遍历并删除 Map 中的元素有几种常见的方法。每种方法都有其适用场景和优缺点。以下是几种常见的方法:

方法一:使用 Iterator

使用 Iterator 是一种安全的方法,可以在遍历过程中删除元素,而不会抛出 ConcurrentModificationException

import java.util.*;public class Main {public static void main(String[] args) {// 创建一个示例 MapMap<String, Integer> map = new HashMap<>();map.put("apple", 1);map.put("banana", 2);map.put("cherry", 3);map.put("date", 4);// 使用 Iterator 遍历并删除符合条件的元素Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();while (iterator.hasNext()) {Map.Entry<String, Integer> entry = iterator.next();if (entry.getValue() % 2 == 0) {iterator.remove();}}// 打印结果System.out.println(map); // 输出: {apple=1, cherry=3}}
}

方法二:使用 Java 8 的 removeIf 方法

Java 8 引入了 Collection 接口的 removeIf 方法,可以方便地删除符合条件的元素。

import java.util.*;public class Main {public static void main(String[] args) {// 创建一个示例 MapMap<String, Integer> map = new HashMap<>();map.put("apple", 1);map.put("banana", 2);map.put("cherry", 3);map.put("date", 4);// 使用 removeIf 方法删除符合条件的元素map.values().removeIf(value -> value % 2 == 0);// 打印结果System.out.println(map); // 输出: {apple=1, cherry=3}}
}

方法三:使用 for-each 循环和临时集合

如果使用 for-each 循环直接删除元素会导致 ConcurrentModificationException,可以先将要删除的元素存储在临时集合中,然后再进行删除。

import java.util.*;public class Main {public static void main(String[] args) {// 创建一个示例 MapMap<String, Integer> map = new HashMap<>();map.put("apple", 1);map.put("banana", 2);map.put("cherry", 3);map.put("date", 4);// 使用临时集合存储要删除的元素List<String> keysToRemove = new ArrayList<>();for (Map.Entry<String, Integer> entry : map.entrySet()) {if (entry.getValue() % 2 == 0) {keysToRemove.add(entry.getKey());}}// 删除临时集合中的元素for (String key : keysToRemove) {map.remove(key);}// 打印结果System.out.println(map); // 输出: {apple=1, cherry=3}}
}

方法四:使用 Map 的 entrySet 和 remove 方法

直接使用 MapentrySetremove 方法也可以实现删除操作,但需要注意避免 ConcurrentModificationException

import java.util.*;public class Main {public static void main(String[] args) {// 创建一个示例 MapMap<String, Integer> map = new HashMap<>();map.put("apple", 1);map.put("banana", 2);map.put("cherry", 3);map.put("date", 4);// 使用 entrySet 和 remove 方法删除符合条件的元素Set<Map.Entry<String, Integer>> entries = map.entrySet();for (Map.Entry<String, Integer> entry : entries) {if (entry.getValue() % 2 == 0) {map.remove(entry.getKey());}}// 打印结果System.out.println(map); // 输出: {apple=1, cherry=3}}
}

总结

  1. 使用 Iterator:适用于任何类型的 Map,是最安全的方法。
  2. 使用 Java 8 的 removeIf 方法:简洁且易于理解,适用于支持 removeIf 方法的集合。
  3. 使用 for-each 循环和临时集合:避免 ConcurrentModificationException,但需要额外的内存开销。
  4. 使用 Map 的 entrySet 和 remove 方法:直接操作 Map,但需要注意避免 ConcurrentModificationException

http://www.mrgr.cn/news/56594.html

相关文章:

  • 【C++】string类(2)
  • Coppelia Sim (v-REP)仿真 机器人3D相机手眼标定与实时视觉追踪 (一)
  • 【前端】如何制作一个自己的网页(15)
  • MobaXterm:tmux返回之前断连的会话命令窗口
  • Vxe UI vue vxe-table grid 如何滚动、定位到指定行或列
  • 《疯狂浙江一女子出轨邻居,撩技惊人》
  • 一种用于传感器网络的新型OPC UA PubSub协议绑定(MQTT-SN)
  • go 语言 Gin Web 框架的实现原理探究
  • Java | Leetcode Java题解之第501题二叉搜索树中的众数
  • 有什么好点子帮助更好的学习英语吗?
  • MySQL-事物隔离级别
  • C++ —— 实现一个日期类
  • 使用Mock库进行依赖注入的实用指南
  • TinyC编译器5—词法分析
  • git 下载慢
  • input标签v-model属性失效
  • 信发软件之展示excel文档——未来之窗行业应用跨平台架构
  • 图像处理学习笔记-20241021
  • Ubuntu配置FTP
  • eCAP超声波测距-ePWM电机调速
  • 影刀RPA实战:网页爬虫之我爱听评书
  • 数据结构 - 树,三探之代码实现
  • 如何看待AI技术的应用前景?
  • AI处理图片和视频的网址
  • 帝国CMS – AutoTitlePic 自动生成文章标题图片插件
  • ARL 灯塔 | ARL 灯塔 — 字典替换