Ответ
Вызов Iterator.next() без предварительной проверки hasNext() или при изменении коллекции может привести к исключениям:
-
NoSuchElementException— если элементов больше нет.List<String> list = List.of("a", "b"); Iterator<String> it = list.iterator(); it.next(); // "a" it.next(); // "b" it.next(); // Выбросит NoSuchElementException -
ConcurrentModificationException— если коллекция была структурно изменена (добавление/удаление элементов) не через методы самого итератора после его создания. Характерно для fail-fast итераторов (например, вArrayList,HashMap).List<String> list = new ArrayList<>(List.of("a", "b")); Iterator<String> it = list.iterator(); list.add("c"); // Прямое изменение коллекции it.next(); // Выбросит ConcurrentModificationException
Правильный паттерн использования:
while (iterator.hasNext()) { // Всегда проверяйте hasNext()
String element = iterator.next();
// Обработка элемента
// iterator.remove(); // Безопасное удаление элемента
}
Почему это важно: Соблюдение этого паттерна гарантирует корректное и предсказуемое поведение при обходе коллекций.