嗨,这段代码将返回indexoutofboundsException,我真的不知道为什么?我想从pointlist中删除那些与list中的对象相同的对象。
public void listOfExternalPoints(List<Point> list) {
System.out.println(list.size());
System.out.println(pointList.size());
int n = pointList.size();
for (int i = pointList.size() - 1; i >= 0; i--) {
for (int j = 0; j < list.size(); j++) {
if (pointList.get(i)==(list.get(j))) {
pointList.remove(i);
n--;
}
}
}
}println的输出也是:
54
62还有一个例外:
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 60, Size: 60
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at ConvexHull.BlindVersion.listOfExternalPoints(BlindVersion.java:83)谢谢。
发布于 2010-11-25 00:40:11
嘿,你从列表中删除了一些元素。因此,该列表比循环开始时要小。
我建议你使用:
pointList.removeAll(list)或者是迭代器。
发布于 2010-11-25 00:39:18
当你做pointList.remove(i)的时候,你应该从内部循环中中断。否则,它将在下一次循环迭代时再次尝试索引您刚刚删除的pointList.get(i),这就是为什么您会得到异常。
当arrayLists删除元素时,该元素将被取出,并且它之后的所有元素都将被下移。因此,如果删除索引3并且只有4个元素,那么新的arrayList只有3个大小,而您试图获得索引3,这是越界的。
编辑:更好的方法是:
for(Point p : list) {
pointList.remove(p);
}它将具有相同的效率,但我认为更正确。请记住,==会比较同一对象的引用。其中,因为remove方法使用.equals来检查是否相等,这就是我假设您想要的。
发布于 2010-11-25 00:39:08
pointList.remove(i);
这将减小您的pointList大小。希望这能有所帮助。
https://stackoverflow.com/questions/4269153
复制相似问题