Правильный способ удалить элементы из коллекции во время итерации — использовать метод ListIterator.remove(). Этот метод безопасно удаляет текущий элемент без исключений:
ListIterator<Integer> iter = myList.listIterator();
while(iter.hasNext()) {
Integer element = iter.next();
iter.remove();
}
Использование стандартного Iterator с прямым удалением из списка вызывает ConcurrentModificationException:
Iterator<Integer> iter = myList.iterator();
while(iter.hasNext()) {
myList.remove(element); // НЕПРАВИЛЬНО - вызывает исключение
}
Это происходит потому что:
ListIterator специально разработан для безопасного удаления элементов, потому что:
remove(), который обновляет и итератор, и базовый списокВсегда используй ListIterator.remove(), когда нужно удалить элементы во время итерации. Это гарантирует потокобезопасность и сохраняет целостность твоей коллекции во время обхода.
Использование ListIterator.remove() безопасно во время итерации, потому что это одновременно обновляет внутреннее состояние итератора и саму коллекцию, предотвращая ConcurrentModificationException.
Новый — ещё не проверен сообществом
Вы