下面是一个例子,说明当你迭代它时尝试修改列表时迭代器会抛出的原因.
假设您的迭代器是使用索引实现的,例如ArrayList:让我们说你的迭代器现在指向List右边的位置3 .现在你在位置添加一个元素1.迭代器不知道你做了什么改变,所以它仍然指向位置3,但是位置3现在保持了曾经位于第2位的元素,因为一切都向下移动了.所以你的迭代器现在将访问一个元素两次!那很糟.
所以规则是当你在迭代它时修改一个列表时,你必须从迭代器本身这样做,所以迭代器知道如何保持它的位置与列表的修改同步.如果您在不经过迭代器的情况下修改列表,则迭代器会抛出ConcurrentModificationException而不是静默地损坏,例如多次访问元素.
| 归档时间: |
|
| 查看次数: |
619 次 |
| 最近记录: |