java - 如果 HashSet、ArrayList 返回的迭代器是快速失败的,我们如何使用迭代器 remove() 从集合中删除元素
问题描述
众所周知,由,等Iterator
返回的 s是快速失败的,但在使用迭代器时不会抛出。如何?ArrayList
HashMap
HashSet
remove()
ConcurrentModificationException
ConcurrentModificationException
如果在迭代集合时修改了集合,则快速失败的迭代器抛出。但是在从迭代器中删除元素ArrayList
或HashSet
使用迭代器remove()
时,不会抛出任何ConcurrentModificationException
. 请详细解释。
谢谢
解决方案
但是在使用迭代器的 remove() 时不会抛出 ConcurrentModificationException。如何?
因为该行为已明确记录在案。
对于ArrayList
:
如果在迭代器创建后的任何时候列表在结构上被修改,除了通过迭代器自己的
remove
或add
方法之外的任何方式,迭代器将抛出一个ConcurrentModificationException
.
对于HashSet
:
如果集合在迭代器创建后的任何时候被修改,除了通过迭代器自己的
remove
方法之外的任何方式,迭代器都会抛出一个ConcurrentModificationException
.
相反,如果您问的是如何实现的,那么源代码(至少对于 OpenJDK)是免费提供的(并且可能直接从您的 IDE 中探索):)
推荐阅读
- ruby-on-rails - 如何在 Gitlab CI 上修复 'Rugged::ReferenceError: revspec 'origin/master' not found'
- php - 跨两个单独的页面访问会话消息
- php - 使用简单的表单、php 和 while 循环将多个 mysqli 行更新为 true 或 false
- java - 如何强制使用给定的表名来连接?
- python - 无法序列化 json 数组
- android - Flutter 未在 Android Studio 中显示颜色托盘的 Intelli 建议框
- reactjs - 在开发模式下使用 create-react-app 时如何将应用程序放在子文件夹中?
- c# - 在 GPU 上运行 kinect 的 C#
- reactjs - 消息没有被推送到 redux 商店
- ios - 从 UIImage 获取(读取)Exif 数据