Найти в Дзене
DEBAGanov

838. Как поведёт себя коллекция, если вызвать iterator.remove()?

Вызов метода remove() на объекте Iterator удаляет текущий элемент коллекции, который был возвращен последним вызовом метода next(). Если метод next() еще не был вызван, либо если метод remove() уже был вызван для текущего элемента, то будет выброшено исключение IllegalStateException.

После удаления элемента итератор перемещается к следующему элементу. Если в коллекции больше нет элементов, то метод hasNext() вернет false.

Когда элемент удаляется из коллекции при помощи метода remove(), коллекция изменяется непосредственно. Однако, если вы пытаетесь удалить элемент напрямую из коллекции, используя методы коллекции, то могут возникнуть проблемы синхронизации.

Пример:

List<String> list = new ArrayList<>(Arrays.asList("one", "two", "three"));
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()) {
String element = iterator.next();
if(element.equals("two")) {
iterator.remove(); // удаление элемента "two" }
}
System.out.println(list); // [one, three]

В этом примере мы создаем список, перебираем его элементы при помощи итератора и удаляем элемент "two". Когда элемент удаляется, он удаляется непосредственно из списка, а оставшиеся элементы сдвигаются на его место.

В результате, если мы выведем содержимое списка после итерации, то увидим список [one, three].

1606 вопрос-ответ по Java: https://github.com/DEBAGanov/interview_questions

Tелеграмм канал: https://t.me/DEBAGanov

Мое резюме: https://github.com/DEBAGanov