Java中Iterator的工作方式

很多时候,您会在面试中被问到这个问题。例如,如何Iterator在Java中工作,如何从中删除对象List?从列表中删除对象时,何时会产生ConcurrentModificationException

在Java中,当您创建迭代器时,它将开始计算对集合进行的修改。如果迭代器检测到在不使用其方法(或在同一collection上使用另一个迭代器)的情况下进行了某些修改,则它无法再保证它不会在同一元素上传递两次或跳过一个元素,因此将引发此异常。

ArrayList方法总是增加一个计数器’ modCount ‘声明为:

protected transient int modCount = 0;

当创建一个IteratorListIteratoron时arraylist,此modCount用于初始化expectedModCountIterator实例。

int expectedModCount = modCount;

直接在ArrayList上执行的任何操作(不使用迭代器实例)都会增加modCount。在执行操作之前,Iterator所有方法都会执行一次检查以验证-的相等性modCount == expectedModCount。如果它们不匹配,则仅引发异常。

final void checkForComodification() {
    if (modCount != expectedModCount)
        throw new ConcurrentModificationException();
}

希望以上解释能帮助您回答这个面试问题。

saigon has written 1440 articles

Leave a Reply