Ответ
Интерфейс Iterable<T> — это фундаментальный контракт в Java, который позволяет объектам быть источником данных для цикла for-each. Он объявляет единственный метод iterator(), возвращающий объект Iterator<T> для последовательного обхода элементов.
Ключевые преимущества:
- Универсальный доступ: Любой класс, реализующий
Iterable, автоматически совместим с улучшенным цикломfor. - Ленивая итерация: Позволяет реализовать обход данных по требованию (например, чтение строк из файла или записей из базы данных), не загружая все элементы в память сразу.
- Стандартизация: Все основные коллекции из Java Collections Framework (
List,Set,Queue) реализуют этот интерфейс.
Пример использования:
List<String> names = List.of("Alice", "Bob", "Charlie");
// Цикл for-each работает, потому что List реализует Iterable
for (String name : names) {
System.out.println(name);
}
Реализация кастомного Iterable:
class Range implements Iterable<Integer> {
private final int start;
private final int end;
public Range(int start, int end) {
this.start = start;
this.end = end;
}
@Override
public Iterator<Integer> iterator() {
return new Iterator<>() {
private int current = start;
@Override
public boolean hasNext() { return current < end; }
@Override
public Integer next() { return current++; }
};
}
}
// Использование
for (int num : new Range(1, 5)) {
System.out.print(num + " "); // Вывод: 1 2 3 4
}