首页 > Java > java教程 > 正文

如何在迭代时安全地从并发映射中删除条目?

Patricia Arquette
发布: 2024-11-12 10:21:02
原创
290 人浏览过

How to Safely Remove Entries from a Concurrent Map While Iterating?

迭代并发映射并从中删除

在迭代期间修改映射时,避免 ConcurrentModificationException 错误至关重要。使用 for (Object key : map.keySet()) 的经典方法会失败,因为循环期间可能会发生映射修改。

常见的解决方法是将键集复制到新集合中,如 for 中所示(对象键:new ArrayList(map.keySet()))。然而,这种方法会创建不必要的副本。

更好的解决方案是使用迭代器来删除映射条目。下面是一个示例:

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();
    }
}
登录后复制

此代码使用迭代器安全地从映射中删除条目。迭代器的remove()方法删除当前条目,允许在迭代过程中安全高效地修改地图。

以上是如何在迭代时安全地从并发映射中删除条目?的详细内容。更多信息请关注PHP中文网其他相关文章!

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