很多时候你会在你的采访中被问到这个问题。例如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();
}