我想迭代一个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.