junior
Как поведёт себя коллекция, если вызвать iterator.remove()
Метод iterator.remove() удаляет из коллекции последний элемент, возвращенный вызовом next(). Если remove() вызван до первого next() или повторно без промежуточного next(), будет выброшено IllegalStateException.
Удаление через итератор — это единственный безопасный способ модифицировать коллекцию во время итерации. В отличие от прямого вызова collection.remove(), итераторный remove() корректно обновляет внутренний счетчик модификаций (expectedModCount), поэтому не вызывает ConcurrentModificationException.
На практике это выглядит так:
Пример
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String s = it.next();
if (s.isEmpty()) {
it.remove(); // безопасное удаление
}
}
На собеседовании: подчеркните, что remove() работает только после next(), иначе — IllegalStateException. Это единственный способ удалять элементы во время итерации без ConcurrentModificationException.