Почему нельзя удалять элементы из коллекции в цикле for-each?

95
08 мая 2021, 03:30

Почему нельзя удалять из коллекции в цикле for-each?

Я читал, что возникает исключение и это небезопасно. Но можно объяснить, почему именно так?

Answer 1

При попытке удаления конкретного элемента коллекции через for-each произойдет ошибка. Например, при удалении:

Exception in thread "main" java.util.ConcurrentModificationException
    at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859)
    at java.util.ArrayList$Itr.next(ArrayList.java:831)
    at Cat.main(Cat.java:25)

Общее правило, которое нужно запомнить:
нельзя проводить одновременно итерацию (перебор) коллекции и изменение ее элементов.

Иначе получается серьезная ошибка. Это из-за того, что когда элемент удален, размер List уменьшается и индексы элементов меняются. И необходим более усовершенствованный вариант "пробегания" по элементам.

Стоит понимать, что цикл for не является итератором.

Для более глубокого изучения необходимо изучить в спецификации метод .iterator()

Так же, в цикле for-each мы работаем с итерационной переменной, а не с элементом массива. Это так же важный момент.

READ ALSO
Реклама ломает программу

Реклама ломает программу

Сначала когда запускаешь приложение все работает и тема и соответствие цветов все окНо когда вызываешь метод Update цвета и тема устанавливаются...

83
Как привязать лист к ключу HashMap?

Как привязать лист к ключу HashMap?

Как в HashMap при добавлении нового ключа создавать новый лист, который принадлежит только этому ключу, и как обращаться к нему?

98
Как сделать своё исключение для проверяемого ексепшна? Java

Как сделать своё исключение для проверяемого ексепшна? Java

У меня есть метод, который принимает и проверяет пин кодКогда, Я ввожу с клавиатуры значение, код просит его обработь IOException

105
Как лучше (красивее) отделить элементы в LinearLayout?

Как лучше (красивее) отделить элементы в LinearLayout?

Имеется интерфейс, который разделен на некоторые разделыВсе они помещены в LinearLayout

91