2

我有以下代码:

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 个对象时才开始循环?

4

2 回答 2

5

当您迭代它时,您正在从 List 中删除元素。这就是尺寸发生变化的原因。

dislist.remove(k);

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

于 2013-01-06T14:32:25.087 回答
4
Iterator<YourClass> iter = dislist.iterator();
while (iter.hasNext()) {
     YourClass obj = iter.next();
     if (/* your expression */) {
          iter.remove();
     }
}
于 2013-01-06T14:40:53.667 回答