首页 > 解决方案 > 如果 HashSet、ArrayList 返回的迭代器是快速失败的,我们如何使用迭代器 remove() 从集合中删除元素

问题描述

众所周知,由,等Iterator返回的 s是快速失败的,但在使用迭代器时不会抛出。如何?ArrayListHashMapHashSetremove()ConcurrentModificationException

ConcurrentModificationException如果在迭代集合时修改了集合,则快速失败的迭代器抛出。但是在从迭代器中删除元素ArrayListHashSet使用迭代器remove()时,不会抛出任何ConcurrentModificationException. 请详细解释。

谢谢

标签: javacollections

解决方案


但是在使用迭代器的 remove() 时不会抛出 ConcurrentModificationException。如何?

因为该行为已明确记录在案。

对于ArrayList

如果在迭代器创建后的任何时候列表在结构上被修改,除了通过迭代器自己的removeadd方法之外的任何方式,迭代器将抛出一个ConcurrentModificationException.

对于HashSet

如果集合在迭代器创建后的任何时候被修改,除了通过迭代器自己的remove方法之外的任何方式,迭代器都会抛出一个ConcurrentModificationException.

相反,如果您问的是如何实现的,那么源代码(至少对于 OpenJDK)是免费提供的(并且可能直接从您的 IDE 中探索):)


推荐阅读