Easyiterator

Что такое Iterator pattern?

1Постановка

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

2Решение

Iterator — последовательный доступ к элементам коллекции без раскрытия её внутреннего представления.

// Iterable<T> — используется в for-each
for (String item : list) { /* ... */ }
// компилируется в:
Iterator<String> it = list.iterator();
while (it.hasNext()) {
    String item = it.next();
    if (item.isEmpty()) it.remove();   // safe removal во время итерации
}

// Custom Iterable — например, Range
class Range implements Iterable<Integer> {
    private final int from, to;
    public Iterator<Integer> iterator() { /* ... */ }
}
  • ListIterator — bidirectional (previous/hasPrevious/add/set);
  • ConcurrentModificationException — если изменять коллекцию не через iterator.remove();
  • Spliterator — для parallel iteration (Stream API);
  • Подходит для lazy evaluation (бесконечные последовательности).

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

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

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