Я новичок в Java, и я действительно запутался с итератором и повторяем. Может кто-нибудь объяснить мне и привести несколько примеров?
197
An Iterable
представляет собой простое представление серии элементов, которые могут быть повторены. У него нет состояния итерации, такого как «текущий элемент». Вместо этого у него есть один метод, который производит Iterator
.
An Iterator
- объект с состоянием итерации. Он позволяет вам проверить, есть ли в нем больше элементов, hasNext()
и перейти к следующему элементу (если есть), используя next()
.
Как правило, Iterable
должно быть в состоянии произвести любое количество действительных Iterator
s.
Iterable
естьinteral
илиexternal
итератор или возможно иметь любой из них?Реализация
Iterable
- это та, которая обеспечиваетIterator
себя:Итератор - это простой способ позволить некоторым циклически проходить по коллекции данных без привилегий присвоения (хотя и с возможностью удаления).
Смотри Javadoc .
источник
Я отвечу на вопрос, особенно о ArrayList в качестве примера, чтобы помочь вам лучше понять ..
, И Iterable, Collection и List просто объявляют абстрактный метод 'iterator ()', и только ArrayList реализует его.
Метод iterator () возвращает объект класса Itr, который реализует Iterator.
Теперь понятно? :)
источник
Iterable<T>
в этом сценарии, какие шаги нам нужно реализовать? Пожалуйста, предложите этот пример также.Если коллекция является итеративной, то она может повторяться с использованием итератора (и, следовательно, может использоваться в каждом цикле.) Итератор - это реальный объект, который будет выполнять итерацию по коллекции.
источник
java.lang.Iterable
?java.lang.Iterable
Реализация интерфейса Iterable позволяет объекту быть целью оператора foreach.
Iterator - это интерфейс, который имеет реализацию для перебора элементов. Iterable - это интерфейс, который предоставляет Iterator.
источник
Наиболее важным соображением является то, должен ли рассматриваемый элемент быть в состоянии пройти более одного раза. Это потому, что вы всегда можете перемотать Iterable с помощью повторного вызова iterator (), но нет способа перемотать Iterator.
источник
Как объяснено здесь , « Iterable » был введен для возможности использования в
foreach
цикле. Класс, реализующий интерфейс Iterable, может быть перебран.Iterator - это класс, который управляет итерацией над Iterable . Он поддерживает состояние, в котором мы находимся в текущей итерации, и знает, что такое следующий элемент и как его получить.
источник
Рассмотрим пример с 10 яблоками. Когда он реализует Iterable, это все равно что складывать каждое яблоко в ячейки от 1 до 10 и возвращать итератор, который можно использовать для навигации.
Реализуя итератор, мы можем получить любое яблоко, яблоко в следующих коробках и т. Д.
Таким образом, реализация iterable дает итератору для навигации по его элементам, хотя для навигации необходимо реализовать итератор.
источник
Вопрос: Разница между Iterable и Iterator?
Ans:
iterable: связан с
итератором цикла forEach : is связан с Collection
Целевой элемент цикла forEach должен быть итеративным.
Мы можем использовать Iterator, чтобы получить объект один за другим из коллекции.
Итеративный подарок в пакете java.ḷang
Итератор, присутствующий в пакете java.util
Содержит только один метод iterator ()
Содержит три метода hasNext (), next (), remove ()
Представлено в версии 1.5
Представлено в версии 1.2
источник
По сути, оба они очень тесно связаны друг с другом.
Считайте Iterator интерфейсом, который помогает нам обходить коллекцию с помощью некоторых неопределенных методов, таких как hasNext (), next () и remove ().
С другой стороны, Iterable является еще одним интерфейсом, который, если он реализован классом, заставляет класс быть Iterable и является целью для конструкции For-Each. У него есть только один метод с именем iterator (), который происходит из самого интерфейса Iterator.
Когда коллекция является итеративной, ее можно повторять с помощью итератора.
Для понимания посетите эти:
ITERABLE: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/Iterable.java
ИТЕРАТОР http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Iterator.java
источник
Я знаю, что это старый вопрос, но для любого, кто читает этот вопрос, кто застрял в одном и том же вопросе и может быть перегружен всей терминологией, вот хорошая, простая аналогия, которая поможет вам понять это различие между итераторами и итераторами:
Подумайте о публичной библиотеке. Старая школа. С бумажными книгами. Да, такая библиотека.
Полка с книгами была бы как бы повторяемой. Вы можете увидеть длинную очередь книг на полке. Вы можете не знать, сколько, но вы можете видеть, что это длинная коллекция книг.
Библиотекарь будет как итератор. Он может указать на конкретную книгу в любой момент времени. Он может вставить / удалить / изменить / прочитать книгу в том месте, куда он указывает. Он последовательно указывает на каждую книгу каждый раз, когда вы кричите «следующий!» Для него. Итак, вы обычно спрашиваете его: «Имеет следующий?», И он отвечает «да», на что вы говорите «следующий»! и он укажет на следующую книгу. Он также знает, когда он достиг конца полки, так что, когда вы спрашиваете: «Есть следующий?» он скажет "нет".
Я знаю, что это немного глупо, но я надеюсь, что это поможет.
источник
В дополнение к ColinD и Seeker ответы.
Проще говоря, Iterable и Iterator - оба интерфейса, предоставленные в Коллекционной платформе Java.
Iterable
Класс должен реализовывать интерфейс Iterable, если он хочет иметь для каждого цикл для итерации по своей коллекции. Однако цикл for-each можно использовать только для циклического перемещения по коллекции в прямом направлении, и вы не сможете изменять элементы в этой коллекции . Но если все, что вам нужно, это прочитать данные элементов, то это очень просто, и благодаря лямбда-выражению Java это часто один лайнер. Например:
Итератор
Этот интерфейс позволяет перебирать коллекцию, получать и удалять ее элементы. Каждый из классов коллекции предоставляет метод iterator (), который возвращает итератор в начало коллекции. Преимущество этого интерфейса перед итеративным состоит в том, что с этим интерфейсом вы можете добавлять, изменять или удалять элементы в коллекции . Но для доступа к элементам требуется немного больше кода, чем для повторения. Например:
Источники:
источник
Iterable
были введены для использования в каждом цикле в JavaIterator
это класс, который управляет итерацией поIterable
. Он поддерживает состояние, в котором мы находимся в текущей итерации, и знает, что такое следующий элемент и как его получить.источник