Iterator在java中的工作原理

xiaoxiao2021-02-28  109

很多时候你会在你的采访中被问到这个问题。例如Iterator在java中如何工作,如何从中删除对象List从列表中删除对象时,可能会产生ConcurrentModificationException什么?

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

ArrayList方法总是增加/减少一个计数器' modCount ',声明为:

protected transient int modCount = 0; 当您创建Iterator/ ListIterat or on时arraylist,此modCount用于初始化expectedModCount该Iterator实例。 int expectedModCount = modCount; 对ArrayList直接执行的任何操作(不使用迭代器实例)都将增加modCount. 在执行操作之前, Iterator 所有方法都执行检查以验证相等性 modCount == expectedModCount 如果它们不匹配,它只会抛出异常。 final void checkForComodification() { if (modCount != expectedModCount) throw new ConcurrentModificationException(); }

转载请注明原文地址: https://www.6miu.com/read-69786.html

最新回复(0)