首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ConcurrentModificationException循环

ConcurrentModificationException循环
EN

Stack Overflow用户
提问于 2015-02-01 07:33:53
回答 1查看 331关注 0票数 2

ConcurrencyTest.java

代码语言:javascript
复制
    Set<String> treeSet = new TreeSet<String>();
    treeSet.add("Alpha");
    treeSet.add("Beta");
    treeSet.add("Gamma");
    treeSet.add("Delta");
    treeSet.add("Epsilon");

    for(String str : treeSet) {
        if("Gamma".equals(str)) {
            treeSet.add("Zeta");
        }
    }

    Iterator<String> it = treeSet.iterator();

    while(it.hasNext()){
        if("Gamma".equals(it.next())) {
            treeSet.add("Lambda");
        }
    }

因为Java的集合框架是故障快速的,而且每个都只是Iterator的包装器,所以我希望在for loopwhile loop中都有一个Java。但是由于某种原因,for循环执行得很好,新元素被添加到集合中。那里发生了什么事?为什么我没有得到例外呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-01 07:43:07

伽马是迭代中的最后一个元素。因此,迭代器在达到Gamma之后停止迭代,因此它无法检测到在迭代期间添加了一个元素。

在第二个循环中,Gamma不再是最后一个元素了,因为Zeta已经被添加了。因此,一旦迭代器试图到达Zeta,它就会抛出异常。

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

https://stackoverflow.com/questions/28260544

复制
相关文章

相似问题

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