Gymterview
junior

Что произойдет при вызове Iterator.next() без предварительного вызова Iterator.hasNext()

Вызов next() без предварительного hasNext() корректен — метод hasNext() не является обязательным перед next(). Если итератор указывает на допустимый элемент, next() вернет его и сдвинет курсор вперед. Если элементов больше нет, будет выброшено исключение NoSuchElementException.

Метод hasNext() — это просто проверка, он не продвигает курсор и не имеет побочных эффектов. Его предназначение — позволить безопасно узнать, есть ли следующий элемент, прежде чем вызывать next(). На практике стандартный паттерн использования — всегда вызывать hasNext() в условии цикла перед next().

На собеседовании: скажите, что hasNext() не обязателен, но без него рискуете получить NoSuchElementException. Подчеркните, что hasNext() — чистая проверка без побочных эффектов.