在迭代其值时删除HashMap的条目是否安全?

时间:2014-06-18 07:44:37

标签: java

假设我知道密钥,是否可以在迭代时删除它

for (ExampleClass e : map.values()) {
    if (condition) {
        map.remove(key);
    }
}

我找到了一个相关的问题(iterating over and removing from a map),但它假设我们正在迭代密钥集。这同样适用于值集吗?

1 个答案:

答案 0 :(得分:4)

来自HashMap javadoc

  

所有这个类的“集合视图方法”返回的迭代器是快速失败的:如果在创建迭代器之后的任何时候对映射进行结构修改,除了通过迭代器自己的remove方法之外,迭代器将会扔一个ConcurrentModificationException

因此您无法使用map.remove(key)

来自HashMap#values()的javadoc:

  

该集合支持元素删除,它通过Iterator.remove,Collection.remove,removeAll,retainAll和clear操作从地图中删除相应的映射。

因此,您可以使用Iterator#remove()从值集中删除条目。