Для чего используется интерфейс Iterable? - PullRequest
36 голосов
/ 29 июня 2009

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

Ответы [ 5 ]

45 голосов
/ 29 июня 2009

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

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

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

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

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

12 голосов
/ 29 июня 2009

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

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

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

5 голосов
/ 29 июня 2009

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

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

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

4 голосов
/ 29 июня 2009

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

3 голосов
/ 29 июня 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...