Fail-fast Iterator如何在内部工作? [复制]

问题描述 投票:0回答:1

我知道什么是快速失败和故障安全迭代器。如果对集合进行了结构修改,则快速失败迭代器会立即引发ConcurrentModificationException。

Fail-Safe dosnt在收集的克隆上工作时会引发任何异常。

我的问题是快速失败迭代器如何知道对我的集合进行了修改?

java collections fail-fast
1个回答
0
投票

没有办法。

[对于ArrayList(以及java.util中的其他类别),迭代器保留一个int expectedModCount(“预期修改计数”),并将其与int expectedModCountAbstractList(“修改count”),只要对列表进行结构上的修改,它就会更新;如果两个值不同,则迭代器将引发异常。


0
投票

您可以自己检查实现。

让我们以int modCount为例。

它具有一个内部int modCount类,ArrayList方法将返回该类的一个实例。

Itr类具有一个iterator()计数器,该计数器由附带的ItrexpectedModCount初始化:

ArrayList

[当您调用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已递增,则会引发异常。

© www.soinside.com 2019 - 2024. All rights reserved.