Вызов метода 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