2 回答
TA贡献2037条经验 获得超6个赞
你可以自己检查一下实现情况。
让我们考虑ArrayList一个例子。
它有一个内部Itr类,该iterator()方法返回该内部类的实例。
该类Itr有一个expectedModCount计数器,它是用封闭的ArrayList's初始化的modCount:
private class Itr implements Iterator<E> {
int cursor; // index of next element to return
int lastRet = -1; // index of last element returned; -1 if no such
int expectedModCount = modCount;
...
}
当您调用 的方法Iterator(例如next()或 )时remove(),它会调用该checkForComodification()方法:
final void checkForComodification() {
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
}
如果自创建实例以来ArrayList'modCount已递增,则会引发异常。Iterator
TA贡献1818条经验 获得超11个赞
没有单一的方法可以实现这一点。
ArrayList
在(以及 中的其他类)的情况下java.util
,迭代器保留一个int expectedModCount
(“预期修改计数”),它与 的 (“修改计数”) 进行比较AbstractList
,int modCount
只要列表有结构修改,它就会更新;如果两个值不同,迭代器将引发异常。
添加回答
举报