假设我知道密钥,是否可以在迭代时删除它
for (ExampleClass e : map.values()) {
if (condition) {
map.remove(key);
}
}
我找到了一个相关的问题(iterating over and removing from a map),但它假设我们正在迭代密钥集。这同样适用于值集吗?
答案 0 :(得分:4)
所有这个类的“集合视图方法”返回的迭代器是快速失败的:如果在创建迭代器之后的任何时候对映射进行结构修改,除了通过迭代器自己的remove方法之外,迭代器将会扔一个
ConcurrentModificationException
。
因此您无法使用map.remove(key)
。
来自HashMap#values()
的javadoc:
该集合支持元素删除,它通过Iterator.remove,Collection.remove,removeAll,retainAll和clear操作从地图中删除相应的映射。
因此,您可以使用Iterator#remove()
从值集中删除条目。