我有以下代码:
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。
是的,我在此前几行将DID添加到列表中。
我想当循环开始时还没有完成。
有没有办法强制Java(在同一个方法中)只有当列表中确实有10个对象时才启动循环?
答案 0 :(得分:5)
您在迭代时会从List中删除元素。这就是尺寸变化的原因。
dislist.remove(k);
创建一个新列表,并将要删除的每个元素添加到其中。循环完成后,使用disList.removeAll(listOfElementsToRemove)
一次删除它们。
答案 1 :(得分:4)
Iterator<YourClass> iter = dislist.iterator();
while (iter.hasNext()) {
YourClass obj = iter.next();
if (/* your expression */) {
iter.remove();
}
}