Iterable — это интерфейс, реализуемый классами, объекты которых можно перебирать (итерировать). У него есть метод iterator(), который возвращает объект Iterator.
Iterator — это интерфейс, предоставляющий методы для пошагового перебора элементов коллекции: hasNext() (проверяет наличие следующего элемента), next() (возвращает следующий элемент) и remove() (удаляет текущий элемент).
Конструкция for-each (или enhanced for loop) в Java синтаксический сахар, который упрощает перебор элементов коллекции. Она работает с любым объектом, реализующим интерфейс Iterable, или с массивами. За кулисами компилятор преобразует for-each в код, использующий Iterator.
Пример использования for-each для списка (реализует Iterable):
java
Эквивалентный код с использованием Iterator:
java
Таким образом, for-each использует Iterator, который получается из Iterable, для упрощения синтаксиса перебора коллекций.