Ответ
Интерфейс 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), что делает концепцию итерации более универсальной.