有类似的问题,但不完全是我想问的。我想问一下Iterator是如何检查修改的。
这个链接表示,它的实现存在于AbstractList类中,其中定义了一个int变量modCount,该变量提供了列表大小更改的次数。此值用于每个next()调用,以检查函数checkForComodification()中的任何修改。
但我无法真正理解。如果只有在每次调用之后才会检查该值,那么如果我执行删除,然后添加相同的调用,大小就不会改变,modCount也不应该改变。但是在相同的循环迭代中删除和添加也会引发异常。
发布于 2013-10-08 20:33:47
当列表被修改时,modCount总是增加(因此是mod计数),所以当有删除时,它也应该增加。因此,它在删除和添加调用时都会增加。
正如蜘蛛侠鲍里斯( Boris )所说,有一个角落的情况是modCount溢出,你可以通过这样做来看到它:
List<Integer> nums = new ArrayList<>();
for(int i = 0; i < 10; i++) nums.add(i);
for(int n : nums) {
System.out.println(n);
for(int i = -1; i < Integer.MAX_VALUE; i++) {
nums.add(i);
nums.remove(nums.size() - 1);
}
}它将(缓慢地)打印0到9,而不会抛出任何异常。
https://stackoverflow.com/questions/19257755
复制相似问题