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

在 Java 中操作 Map时,高效遍历和安全删除数据

在 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");

三、关键注意事项

  1. 避免并发修改异常
    遍历时直接调用 map.remove(key) 会导致 ConcurrentModificationException,必须使用 Iterator.remove()removeIf

  2. 性能优化

    • HashMap,优先遍历 entrySet()(直接获取 Key-Value)。
    • 对只读操作,forEachStream 性能接近;需过滤/删除时优先用 removeIf
  3. 并发场景
    多线程环境下使用 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 数据结构。

http://www.lryc.cn/news/571378.html

相关文章:

  • Arrays.asList() 的不可变陷阱:问题、原理与解决方案
  • FPGA 43 ,UDP 协议详细解析( FPGA 中的 UDP 协议 )
  • 升级OpenSSL和OpenSSH 修复漏洞
  • 多组件 flask 项目
  • 数据库新选择?KingbaseES在线体验详解
  • Patch Position Embedding (PPE) 在医疗 AI 中的应用编程分析
  • 工业 AI Agent:智能化转型的核心驱动力
  • 计算机网络学习笔记:TCP流控、拥塞控制
  • taro小程序如何实现新用户引导功能?
  • 【数据结构】图论实战:DAG空间压缩术——42%存储优化实战解析
  • AI大模型初识(一):AI大模型的底层原理与技术演进
  • 数据库系统概论(二十)数据库恢复技术
  • Linux Kernel崩溃分析的法宝:Kdump+Crash(上)
  • 暴雨服务器成功中标洪湖市政府框架采购项目
  • 汽车 CDC威胁分析与风险评估
  • 解锁VSCode:从入门到精通的全攻略
  • ArcGIS Pro无插件加载(无偏移)天地图!一次添加长久使用
  • 【机器人学】2-5.七自由度机器人逆解-SRS型机器人【附MATLAB代码】
  • React19源码系列之Hooks (useEffect、useLayoutEffect、useInsertionEffect)
  • 电阻、电容、电感
  • 单片机 - STM32读取GPIO某一位时为什么不能直接与1判断为高电平?
  • 力扣面试题 17.05. 字母与数字
  • SpringBoot 通过集成 Flink CDC 来实时追踪 MySql 数据变动
  • 基于高性能的光频域反射(OFDR)分布式光纤传感解决方案
  • 爬虫技术:从基础到高级,探索数据抓取的奥秘
  • 深度融合数智化,百胜软件联合华为云加速零售行业转型升级
  • 【Manus第三篇-Prompt优化】两周实战,一套注意力视角的prompt优化框架,真的有用!
  • 【笔记】MSYS2 的 MinGW64 环境中正确安装 Python 相关环境管理工具 (Poetry、Virtualenv、Pipenv 和 UV)
  • 复现 apache HTTPD 换行解析漏洞(CVE-2017-15715)
  • ABP vNext + Sentry + ELK Stack:打造高可用异常跟踪与日志可视化平台