迭代器的remove方法如何实际移除一个对象

13 浏览
0 Comments

迭代器的remove方法如何实际移除一个对象

我们都知道在遍历集合时,从集合中删除对象的最安全且可能是唯一安全的方法是首先获取迭代器,然后执行循环并在需要时进行删除。

我想要理解的是,如果使用以下代码:

for(Object o:myCollection().getObjects()){
    if(o.equals(what i'm looking for)){
        myCollection.remove(o);
    }
}

会抛出ConcurrentModificationException异常,那么从技术角度讲,Iterator.remove()方法是如何工作的?它是删除对象后中断循环并重新开始循环吗?

我在官方文档中看到:

"Removes the current element. Throws IllegalStateException if an
  attempt is made to call remove() that is not preceded by a call to
  next( )."

其中的"Removes the current element"这部分让我想到在"常规"循环中发生的确切情况 =>(执行相等性测试并在需要时进行删除),但为什么迭代器循环是安全的并且不会出现并发修改的问题?

0