首先,你应该知道(
根据JLS,以下增强的for循环:
字符串列表(for ) {
//Do something with s
}
来定义自定义外观。
迭代器it=list .迭代器(for ); it.hasNext (; () )。
String s=it.next (;
//Do something with s
}
如果您查看AbstractList中迭代器的实现,将会看到以下内容:
hasNext () )不检查并发修改,而是只使用大小检查是否位于列表末尾。
公共布尔主机(
返回当前!=size (;
}
next ) )首先调用checkForComodification ) )以查看在迭代过程中列表是否已更改。
公共下一个() {
检查修改;
try {
enext=get(cursor );
lastRet=cursor;
返回下一步;
} catch (indexoutofboundsexceptione ) )。
检查修改;
throw new NoSuchElementException (;
}
}
finalvoidcheckforcomodification (
if (模式计数!=expectedModCount )
thrownewconcurrentmodificationexception (;
}
因此,如果重复删除列表的倒数第二个元素,则以下指令将调用hasNext ) ),而不调用该元素将减少列表的大小(next ) ),迭代将停止并抛出异常,因此返回false
顺便说一下,这些都只是实现的细节。 因为可以变更,所以不应该依赖那个。 此外,在迭代期间使用it.remove ) )从列表中删除元素。