🔍 Ответ на задачу про Iterator.remove(): Чистим коллекцию правильно 🧹
- Вариант A (for-each) использует итератор неявно. Если мы вызываем
- Вариант B использует
Вывод:
Верный вариант — B. (Хотя есть исключение: в ArrayList удаление предпоследнего элемента через
⚡️ Не перепутайте:
В Java 8+ самый простой и безопасный способ:
#java #collections #iterator #bug #clean_code #интервью #java_interview_tasks
- Вариант A (for-each) использует итератор неявно. Если мы вызываем
list.remove() напрямую, итератор об этом не знает и при следующей проверке modCount выбросит ConcurrentModificationException.- Вариант B использует
iterator.remove(). Этот метод специально спроектирован для безопасного удаления текущего элемента во время итерации.Вывод:
Верный вариант — B. (Хотя есть исключение: в ArrayList удаление предпоследнего элемента через
list.remove() в for-each может не вызвать ошибку из-за бага/особенности проверки hasNext(), но полагаться на это нельзя).⚡️ Не перепутайте:
В Java 8+ самый простой и безопасный способ:
list.removeIf(s -> s.equals("A")).#java #collections #iterator #bug #clean_code #интервью #java_interview_tasks
Telegram
Java Interview Tasks
Можно ли удалять элементы из списка во время обхода?
Какой код НЕ выбросит ConcurrentModificationException?
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
// Вариант A
for (String s : list) {
if (s.equals("A")) list.remove(s);…
Какой код НЕ выбросит ConcurrentModificationException?
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
// Вариант A
for (String s : list) {
if (s.equals("A")) list.remove(s);…
👏5❤1🍌1