こんにちは このコードではindexoutofboundsException
が返されますが、実際にはなぜわかりませんか? pointlist
から、list
のオブジェクトと同じオブジェクトを削除したいとします。IndexOutOfBoundsException
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の入れては次のようになります。また
例外:
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)
感謝。
根本的なリストの形を変更するときにforeachループを使用することは明示的に安全ではありません。このコードは、pointListのiterator.next()でConcurrentModificationExceptionを発生させます。 –
.removeはリストのO(n)操作です。だから、これはO(n^2)で実行できるときにO(n^3)になります。 – shoebox639
イテレータは安全でしょうか? –