首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >故障快速迭代器实现

故障快速迭代器实现
EN

Stack Overflow用户
提问于 2013-10-08 20:31:20
回答 1查看 3.3K关注 0票数 7

有类似的问题,但不完全是我想问的。我想问一下Iterator是如何检查修改的。

这个链接表示,它的实现存在于AbstractList类中,其中定义了一个int变量modCount,该变量提供了列表大小更改的次数。此值用于每个next()调用,以检查函数checkForComodification()中的任何修改。

但我无法真正理解。如果只有在每次调用之后才会检查该值,那么如果我执行删除,然后添加相同的调用,大小就不会改变,modCount也不应该改变。但是在相同的循环迭代中删除和添加也会引发异常。

EN

回答 1

Stack Overflow用户

发布于 2013-10-08 20:33:47

当列表被修改时,modCount总是增加(因此是mod计数),所以当有删除时,它也应该增加。因此,它在删除和添加调用时都会增加。

正如蜘蛛侠鲍里斯( Boris )所说,有一个角落的情况是modCount溢出,你可以通过这样做来看到它:

代码语言:javascript
复制
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,而不会抛出任何异常。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19257755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档