首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java并发修改

Java并发修改
EN

Stack Overflow用户
提问于 2013-01-06 22:28:50
回答 2查看 91关注 0票数 2

我有以下代码:

代码语言:javascript
复制
System.out.println(dislist.size());

for (int k = 0; k < 10; k++) {
    System.out.println(k + dislist.get(k).first + dislist.get(k).second);

    if (!dislist.get(k).first.equals(Nodename)) {
        if (dislist.get(k).first.equals(myfirst) ||
            dislist.get(k).first.equals(mysecond) ||
            dislist.get(k).second.equals(myfirst) ||
            dislist.get(k).second.equals(mysecond)) {
                dislist.remove(k);                    
            }
        }
    }
}

问题是:开头的打印清楚地表明dislist.size()是10。但是,我得到了一个超出界限的数组异常,告诉我列表的大小不超过6。是的,我确实在之前几行向列表中添加了新对象。我猜当循环开始的时候,还没有结束。有没有办法强制Java (在相同的方法中)只有在列表中确实有10个对象时才开始循环?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-06 22:40:54

代码语言:javascript
复制
Iterator<YourClass> iter = dislist.iterator();
while (iter.hasNext()) {
     YourClass obj = iter.next();
     if (/* your expression */) {
          iter.remove();
     }
}
票数 4
EN

Stack Overflow用户

发布于 2013-01-06 22:32:25

在遍历列表时,您将从列表中删除元素。这就是大小改变的原因。

dislist.remove(k);

创建一个新列表,并向其中添加要删除的每个元素。循环结束后,使用disList.removeAll(listOfElementsToRemove)一次性将它们全部删除。

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

https://stackoverflow.com/questions/14183070

复制
相关文章

相似问题

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