В Java, Iterable, Iterator и "for-each" работают вместе, чтобы обеспечить эффективную итерацию коллекций. Интерфейс Iterable определяет метод iterator(), который возвращает объект типа Iterator. Этот метод используется для получения итератора для перебора элементов коллекции. Iterator, в свою очередь, предоставляет три основных метода: hasNext(), next() и remove(). hasNext() используется для проверки наличия следующего элемента в коллекции, next() - для получения следующего элемента, а remove() - для удаления текущего элемента из коллекции. С помощью цикла "for-each" мы можем легко перебирать элементы коллекции, не используя явно итератор. Цикл "for-each" самостоятельно вызывает метод iterator() из интерфейса Iterable для получения итератора и затем использует методы hasNext() и next() из интерфейса Iterator для перебора элементов коллекции. Пример: List<String> list = new ArrayList<String>();
list.add("one");
list.add("two");
list.add("three");
// Используем цикл for-each для вывод