Я начинаю, и я не могу понять реальный эффект интерфейса 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
, который будет использоваться для перебора (т.е. Перемещения) данных в объекте.