Когда вы делаете pointList.remove(i)
, вы должны выйти из внутреннего цикла.В противном случае он попытается проиндексировать pointList.get(i)
, который вы только что удалили, снова на следующей итерации цикла, поэтому вы получаете исключение.
Когда arrayLists удаляет элементы, этот элемент удаляетсяи все элементы после него сдвигаются вниз.Таким образом, если вы удалите индекс 3 и в нем будет только 4 элемента, новый массив arrayList будет иметь только размер 3, и вы попытаетесь получить индекс 3, выходящий за пределы.
for(Point p : list) {
pointList.remove(p);
}
Он будет иметь такую же эффективность, но, думаю, более корректно.Помните, что ==
сравнивает ссылки для одного и того же объекта.Где в качестве метода удаления используются .equals для проверки на равенство, что, как я полагаю, вы хотите.