Ale*_*xis 0 java iterator data-structures
众所周知,我们不能在迭代它时修改非线程安全的集合,因为它会抛出一个ConcurrentModificationException
但我想知道的是,如果它不会抛出异常并让迭代和修改同时发生会发生什么.
例如,在迭代时从HashMap中删除一个元素.
去掉.由于删除操作不会改变HashMap中底层表的长度,我认为这不是迭代的问题.
放.也许问题只发生在Put触发器调整大小()时,因为基础表将被洗牌.
我的分析是否正确?
简答:不,你的分析不正确.
如果在迭代它时从集合中删除某些东西(不使用迭代器),迭代器就没有很好的方法来跟踪它的位置.使用更简单的示例:List.假设迭代器位于索引10处,并删除索引5.该删除会移动所有索引.现在你在迭代器上调用next(),你......什么?转到索引11?保持在10指数?迭代器无法知道.
类似地,如果在迭代它时向集合中添加一些东西(不使用迭代器),迭代器不知道是在当前索引之前还是之后添加了它,因此next()函数被破坏.
这甚至没有进入迭代器顺序取决于集合中的内容的数据结构,但问题类似于我上面列出的问题.
| 归档时间: |
|
| 查看次数: |
1119 次 |
| 最近记录: |