Java 若HashSet、ArrayList返回的迭代器很快就会失败,那个么我们如何使用迭代器remove()从集合中删除元素呢
我们都知道,Java 若HashSet、ArrayList返回的迭代器很快就会失败,那个么我们如何使用迭代器remove()从集合中删除元素呢,java,collections,Java,Collections,我们都知道,ArrayList返回的Iterator,HashMap,HashSet等都会很快失败,但在使用Iterator的remove()时不会抛出ConcurrentModificationException。怎么做 如果在对集合进行迭代时修改了集合,则快速失败迭代器将抛出ConcurrentModificationException。但是,当使用迭代器的remove()从ArrayList或HashSet中删除元素时,不会抛出任何ConcurrentModificationExcepti
ArrayList
返回的Iterator
,HashMap
,HashSet
等都会很快失败,但在使用Iterator的remove()
时不会抛出ConcurrentModificationException
。怎么做
如果在对集合进行迭代时修改了集合,则快速失败迭代器将抛出ConcurrentModificationException。但是,当使用迭代器的remove()
从ArrayList
或HashSet
中删除元素时,不会抛出任何ConcurrentModificationException
。请详细解释
谢谢
但在使用迭代器的remove()时,不会抛出ConcurrentModificationException。怎么做
因为这种行为是明确记录的
用于:
如果在创建迭代器后的任何时候,以迭代器自己的remove
或add
方法以外的任何方式修改列表的结构,迭代器将抛出ConcurrentModificationException
用于:
如果在创建迭代器后的任何时间,以迭代器自己的remove
方法以外的任何方式修改集合,迭代器将抛出ConcurrentModificationException
如果您问的是如何实现的,那么,源代码(至少对于OpenJDK)是免费提供的(并且可能可以直接从IDE进行探索):实现如下: 集合包含名为
modificationCount
的private int
成员(或类似内容)。每次使用修改集合的方法之一时,此modificationCount
都会递增。在集合上创建迭代器时,迭代器会注意集合的modificationCount
的当前值,每次调用迭代器时,它都会确保modificationCount
没有更改,以确保在迭代时集合没有被修改。如果迭代器发现modificationCount
已更改,它将抛出ConcurrentModificationException
通过
迭代器
删除时,迭代器不会增加集合的修改计数
。就是这么简单。为什么不看看源代码呢?它与JDK一起提供:它在调用列表的remove方法后更新expectedModCount。就这么简单。你是在问为什么会有这种行为?或者你在问这个行为是如何实现的?