Что делает интерфейс Iterable в Java?

«Что делает интерфейс Iterable в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Интерфейс Iterable<T> позволяет объекту быть целью цикла for-each (enhanced for loop). Он определяет контракт для получения итератора (Iterator<T>) для последовательного обхода элементов.

Ключевые моменты:

  • Содержит единственный абстрактный метод iterator(), возвращающий Iterator<T>.
  • Реализуется всеми основными коллекциями (Collection, List, Set, Queue) из стандартной библиотеки.
  • Позволяет использовать лаконичный синтаксис: for (T item : iterable).
  • Начиная с Java 8, предоставляет методы по умолчанию: forEach(Consumer) и spliterator().

Пример использования:

List<String> list = Arrays.asList("a", "b", "c");
// Цикл for-each работает, потому что List реализует Iterable
for (String s : list) {
    System.out.println(s);
}
// Использование forEach (Java 8+)
list.forEach(System.out::println);

Почему это важно: Iterable — это фундаментальный интерфейс, абстрагирующий источник данных и делающий код, который их обрабатывает, независимым от конкретной реализации коллекции.