Вот мой код:
import java.util.ArrayList;'
import java.util.Iterator;'
import java.util.List;'
public class Test {
public static void main(String[] args) {
List<Integer> ourList = new ArrayList<>();
Iterator<Integer> iterator = ourList.iterator();
for (int i = 0; i < 5; i++) {
ourList.add(i + 1);
}
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
Выдает следующую ошибку при запуске:
Exception in thread "main" java.util.ConcurrentModificationException
at java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:937)
at java.base/java.util.ArrayList$Itr.next(ArrayList.java:891)
at Test.main(Test.java:16)
ошибка говорит о том что вы модифицировали коллекцию параллельно с использованием итератора: в данном конкретном случае вы добавили элементы после создания итератора.
если перенести создание итератора после цикла с добавлением элементов то ошибки не будет.
В итераторе есть встроенная проверка на то, что коллекция не изменяется во время итерации.
Вы сперва создали итератор, он запомнил, что в коллекция пустая. Потом вы добавили в коллекцию элементы. Затем вы пытаетесь использовать итератор, но он обнаруживает, что коллекция изменилась, и выбрасывает исключение.
Вам нужно получать итератор неподсредственно перед использованием:
Iterator<Integer> iterator = ourList.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости