首页 > Java > java教程 > 迭代时如何安全地从 HashMap 中删除元素?

迭代时如何安全地从 HashMap 中删除元素?

DDD
发布: 2024-11-17 08:11:03
原创
886 人浏览过

How to Safely Remove Elements from a HashMap while Iterating?

迭代和删除时发生并发修改异常

在进行并发修改(例如删除元素)时迭代 HashMap 时,可能会出现 ConcurrentModificationException发生。这是因为迭代器对映射的内部引用因修改而失效。

使用 ArrayList 的初始解决方案

避免此异常的一种常见方法是创建副本使用 new ArrayList(map.keySet()) 获取地图的键集。但是,这种方法会创建不必要的键副本,效率可能会很低。

使用迭代器进行删除

更有效的解决方案是迭代映射的条目使用迭代器,它允许我们安全地删除元素。映射的entrySet()方法返回一组条目,每个条目都有一个getKey()和getValue()方法。

示例代码:

Map<String, String> map = new HashMap<>();
map.put("test", "test123");
map.put("test2", "test456");

for (Iterator<Map.Entry<String, String>> it = map.entrySet().iterator(); it.hasNext();) {
    Map.Entry<String, String> entry = it.next();
    if (entry.getKey().equals("test")) {
        it.remove();
    }
}
登录后复制

在此示例中,我们迭代地图的条目并安全地删除“test”键。迭代器处理对映射内部结构的必要修改,防止 ConcurrentModificationException。

以上是迭代时如何安全地从 HashMap 中删除元素?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板