看看这个小代码:
ArrayList al = new ArrayList();
al.add("AA");
al.add("AB");
al.add("AC");
Iterator it = al.iterator();
while(it.hasNext()){
String s = (String)it.next();
if(s.equals("AB")){
al.remove(1);
}
}
由于 ArrayList 具有快速失败的迭代器,而且很明显,给定的 ArrayList 不是由固定大小的数组组成(这会使remove()
方法不可用),所以上面的代码应该已经抛出ConcurrentModificationException
,但是是的,它没有。
另外,如果我在循环中插入一个打印语句(作为第一条语句),它表明循环不会第三次迭代并且它会优雅地退出。
我知道这听起来太愚蠢了,但我能错误地想到的唯一原因是元素的删除发生在迭代器遍历元素之后。但事实并非如此,因为modificationCount
它仍然被删除修改,所以它必须抛出异常。
只是在做
while(it.hasNext()){
it.next();
al.remove(1);
}
虽然确实会抛出 ConcurrentModificationException 。
有什么见解吗?