【发布时间】:2013-04-06 06:42:03
【问题描述】:
我们都知道,在迭代时从集合中删除对象的最安全“可能也是唯一安全”的方法是首先检索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);
}
}
会抛出ConcurrentModificationException,“从技术上讲”Iterator.remove() 是做什么的?它会移除对象、中断循环并重新开始循环吗?
我在官方文档中看到:
"删除当前元素。抛出
IllegalStateException,如果 尝试调用remove()之前没有调用 下一个()。”
“删除当前元素”部分让我想到了“常规”循环中发生的完全相同的情况 =>(执行相等测试并在需要时删除),但为什么迭代器循环 ConcurrentModification 安全?
【问题讨论】:
标签: java loops collections iterator