Какое место в иерархии коллекций Java занимает интерфейс Iterable?

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

Ответ

Интерфейс java.lang.Iterable<T> является корневым интерфейсом для всех коллекций, поддерживающих итерацию. Он находится на вершине иерархии, выше Collection<E>.

Иерархия: Iterable<T>Collection<E>List<E>, Set<E>, Queue<E>.

Ключевая роль:

  • Определяет единственный метод Iterator<T> iterator().
  • Позволяет объектам быть целью enhanced for-loop (for-each).
  • Добавлен в Java 5 как фундамент для цикла for-each.

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

Iterable<String> iterable = Arrays.asList("A", "B", "C");
// 1. Использование for-each (основной сценарий)
for (String element : iterable) {
    System.out.println(element);
}
// 2. Явное получение итератора
Iterator<String> it = iterable.iterator();
while (it.hasNext()) {
    System.out.println(it.next());
}

Почему он отделен от Collection? Iterable может быть реализован классами, не являющимися коллекциями в полном смысле (например, DirectoryStream в NIO), что делает концепцию итерации более универсальной.