Java Set迭代器,可以安全地删除元素吗?

Pet*_*mit 9 java iterator set

我想迭代一个Set并从集合中删除匹配某些条件的元素.迭代器文档没有说明在迭代时修改列表.

这可能吗?如果没有,最好的方法是什么?请注意,我只想删除迭代器提供的集合中的元素.

编辑:快速显示这是可能的.我也可以使用以下语法吗?

for(Node n : mySet) {
    mySet.remove(n);
}
Run Code Online (Sandbox Code Playgroud)

tan*_*ens 16

是的,您可以使用迭代器安全地删除当前元素:

iterator.remove();
Run Code Online (Sandbox Code Playgroud)

javadoc中remove()说道:

如果存在,则从该集合中移除指定的元素(可选操作).更正式地,如果此集合包含这样的元素,则删除元素e(o == null?e == null:o.equals(e)).如果此set包含该元素,则返回true(或等效地,如果此set由于调用而更改).(一旦调用返回,该集合将不包含该元素.)


回答你的下一个问题:不,你不能.使用增强的for循环迭代修改集合将导致a ConcurrentModificationException.