首页  >  文章  >  Java  >  如何在迭代过程中安全地从地图中删除元素?

如何在迭代过程中安全地从地图中删除元素?

Susan Sarandon
Susan Sarandon原创
2024-11-17 01:46:03572浏览

How to Safely Remove Elements from a Map During Iteration?

迭代并从映射中删除元素:解决并发修改异常

迭代映射并删除其元素可能会导致 ConcurrentModificationException 。当 Java Collection 在迭代过程中被修改时,会发生此异常,从而在迭代器和底层集合之间创建不同步状态。

为了避免此异常,一种常见的方法是创建集合的副本在迭代之前的键。在您的代码中,以下行完成此操作:

for (Object key : new ArrayList<Object>(map.keySet()))

此方法很有效,但可能有更有效的解决方案。

使用迭代器删除条目

Java 集合框架提供了一个迭代器,允许在迭代期间安全删除元素。以下代码示例演示了如何使用迭代器从映射中删除带有键“test”的条目:

Map<String, String> map = new HashMap<String, String>() {
  {
    put("test", "test123");
    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();
    }
}

此解决方案使用迭代器的remove()方法,该方法可以安全地从映射中删除当前条目地图。这种方法避免了创建密钥集的单独副本的需要,并且通常更有效,特别是对于大型地图。

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn