我有以下代码:
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个对象时才开始循环?
发布于 2013-01-06 22:40:54
Iterator<YourClass> iter = dislist.iterator();
while (iter.hasNext()) {
YourClass obj = iter.next();
if (/* your expression */) {
iter.remove();
}
}发布于 2013-01-06 22:32:25
在遍历列表时,您将从列表中删除元素。这就是大小改变的原因。
dislist.remove(k);
创建一个新列表,并向其中添加要删除的每个元素。循环结束后,使用disList.removeAll(listOfElementsToRemove)一次性将它们全部删除。
https://stackoverflow.com/questions/14183070
复制相似问题