Ответ
Базовый интерфейс — java.lang.Iterable<T>. Его реализация позволяет объекту быть целью for-each цикла.
Контракт интерфейса:
public interface Iterable<T> {
Iterator<T> iterator(); // Должен возвращать итератор
// default-методы forEach() и spliterator()...
}
Как это работает:
- Коллекции (например,
List,Set) реализуютIterable<T>. - Метод
iterator()возвращает объект, реализующий интерфейсIterator<T>с методамиhasNext(),next()иremove().
Пример использования итератора:
List<String> names = List.of("Alice", "Bob", "Charlie");
Iterator<String> it = names.iterator();
while (it.hasNext()) {
String name = it.next();
System.out.println(name);
// it.remove(); // Опциональное удаление элемента (поддерживается не всеми коллекциями)
}
Пример for-each (требует Iterable):
// Цикл for-each неявно вызывает iterator()
for (String name : names) {
System.out.println(name);
}
Важно: Сам Iterable не является коллекцией. Это более общий контракт для любых объектов, которые можно обойти (например, DirectoryStream).