Easyiterator

Что такое Iterator и Iterable?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Iterable<T> — объект, который можно итерировать (в for-each): содержит Iterator<T> iterator(). Iterator<T>hasNext(), next(), опционально remove().

// for-each компилируется в iterator().hasNext()/next()
for (String s : list) { System.out.println(s); }

// Iterator.remove() — единственный безопасный remove во время итерации
Iterator<String> it = list.iterator();
while (it.hasNext()) {
    String s = it.next();
    if (s.isEmpty()) it.remove();
}
  • ListIterator extends Iterator — hasPrevious, previous, set, add (для List);
  • ConcurrentModificationException — если коллекция изменена во время итерации (fail-fast);
  • Iterable.forEach(consumer) (Java 8) — internal iteration;
  • Spliterator — для параллельной итерации (используется в Stream).

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.