Вопрос

Я новичок и не могу понять реальный эффект Iterable интерфейс.

Это было полезно?

Решение

Помимо того, что сказал Джереми, его главное преимущество заключается в том, что у него есть собственный синтаксический сахар:тот улучшенный цикл for.Если у вас есть, скажем, Iterable<String>, ты можешь сделать:

for (String str : myIterable) {
    ...
}

Красиво и легко, не так ли?Вся грязная работа по созданию Iterator<String>, проверяю, так ли это hasNext(), и звоню str = getNext() обрабатывается компилятором за кулисами.

И поскольку большинство коллекций либо реализуют Iterable или иметь представление, которое возвращает его (например, Map's keySet() или values()), это значительно упрощает работу с коллекциями.

В Iterable Javadoc дает полный список классов, реализующих Iterable.

Другие советы

Если у вас сложный набор данных, например дерево или спиральная очередь (да, я только что это придумал), но вы плевать как это структурировано внутри: вы просто хотите получить все элементы один за другим, вы получаете возврат итератора.

Рассматриваемый сложный объект, будь то дерево, очередь или WombleBasket, реализует Iterable и может возвращать объект итератора, который вы можете запросить с помощью методов Iterator.

Таким образом, вы можете просто спросить его, если это hasNext(), и если это так, вы получите next() предмет, не беспокоясь о том, где его взять с дерева или где-то еще.

Он возвращает java.util.Iterator.В основном он используется для возможности использования типа реализации в расширенном цикле for.

List<Item> list = ...
for (Item i:list) {
 // use i
}

Под капотом компилятор вызывает list.iterator() и повторяет его, давая вам i внутри цикла for.

Интерфейс по своей сути представляет собой список методов, которые должен реализовать класс.Итерируемый интерфейс очень прост — можно реализовать только один метод: Iterator().Когда класс реализует Iterable интерфейс, он сообщает другим классам, что вы можете получить Iterator объект, который будет использоваться для перебора (т. е. обхода) данных в объекте.

Итераторы в основном позволяют выполнять итерацию по любой коллекции.

Это также то, что необходимо для использования оператора управления Java for-each.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top