我们都知道,在迭代时从集合中删除对象的最安全“可能也是唯一安全”的方法是首先检索Iterator
,执行循环并在需要时删除;
Iterator iter=Collection.iterator();
while(iter.hasNext()){
Object o=iter.next()
if(o.equals(what i'm looking for)){
iter.remove();
}
}
我想了解但不幸的是还没有找到深入的技术解释是如何执行此删除,
如果:
for(Object o:myCollection().getObjects()){
if(o.equals(what i'm looking for)){
myCollection.remove(o);
}
}
will throw a ConcurrentModificationException
,“从技术上讲”Iterator.remove()
是做什么的?它会移除对象、中断循环并重新启动循环吗?
我在官方文档中看到:
“删除当前元素。
IllegalStateException
如果尝试调用remove()
之前没有调用 next() 则抛出。”
“删除当前元素”部分让我想到了在“常规”循环 => 中发生的完全相同的情况(执行相等测试并在需要时删除),但为什么迭代器循环 ConcurrentModification 安全?