Я начинаю, и я не могу понять реальный эффект интерфейса Iterable.
Для чего используется интерфейс Iterable?
Ответ 1
Кроме того, что сказал Джереми, его основное преимущество в том, что у него есть свой собственный бит синтаксического сахара: улучшенный для цикла. Если у вас есть, скажем, Iterable<String>, вы можете сделать:
for (String str : myIterable) {
...
}
Приятно и легко, не так ли? Вся грязная работа по созданию Iterator<String>, проверка, если она hasNext(), и вызов str = getNext() обрабатывается компилятором за кулисами.
И поскольку большинство коллекций либо реализуют Iterable, либо имеют представление, которое возвращает один (например, Map keySet() или values()), это облегчает работу с коллекциями.
Iterable Javadoc дает полный список классов, которые реализуют Iterable.
Ответ 2
Если у вас сложный набор данных, например дерево или спиральная очередь (да, я только что сделал это), но вам все равно, как он структурирован внутри, вы просто хотите получить все элементы по одному, вы получите его, чтобы вернуть итератор.
Сложный объект, о котором идет речь, будь то дерево или очередь или WombleBasket реализует Iterable и может возвращать объект итератора, который вы можете запросить, используя методы Iterator.
Таким образом, вы можете просто спросить его, если он hasNext(), и если это произойдет, вы получите элемент next(), не беспокоясь, где его получить из дерева или где угодно.
Ответ 3
Он возвращает java.util.Iterator. В основном он используется, чтобы иметь возможность использовать тип реализации в расширенном для цикла
List<Item> list = ...
for (Item i:list) {
// use i
}
Под капотом компилятор вызывает list.iterator() и выполняет итерацию, предоставляя вам i внутри цикла for.
Ответ 4
Итераторы в основном допускают итерацию по любой коллекции.
Это также то, что требуется для использования инструкции Java для каждого элемента управления.
Ответ 5
Интерфейс представляет собой список методов, которые должен реализовать класс. Итерируемый интерфейс очень прост - реализовать только один метод: Iterator(). Когда класс реализует интерфейс Iterable, он сообщает другим классам, что вы можете получить объект Iterator, который будет использоваться для перебора (т.е. Перемещения) данных в объекте.