Jestem nowy w Javie i naprawdę mylę się z iteratorem i iterowalnością. Czy ktoś może mi wyjaśnić i podać kilka przykładów?
196
Jest Iterable
to prosta reprezentacja szeregu elementów, które można iterować. Nie ma żadnego stanu iteracji, takiego jak „bieżący element”. Zamiast tego ma jedną metodę, która tworzyIterator
.
An Iterator
jest obiektem ze stanem iteracji. Pozwala sprawdzić, czy ma więcej elementów za pomocą hasNext()
i przejść do następnego elementu (jeśli istnieje) za pomocą next()
.
Zazwyczaj Iterable
powinien być w stanie wygenerować dowolną liczbę poprawnych Iterator
s.
Iterable
mainteral
lubexternal
iterator, czy można mieć którekolwiek z nich?Implementacja
Iterable
to taka, która zapewniaIterator
:Iterator to prosty sposób pozwalający niektórym przeglądać kolekcję danych bez uprawnień do przypisywania (choć z możliwością usuwania).
Zobacz Javadoc .
źródło
Odpowiem na pytanie szczególnie o ArrayList jako przykład, aby pomóc Ci lepiej zrozumieć ..
. Iterable, Collection i List deklarują po prostu metodę abstrakcyjną „iterator ()”, a sama ArrayList ją implementuje.
Metoda „iterator ()” zwraca obiekt klasy „Itr”, który implementuje „Iterator”.
Czy to jasne? :)
źródło
Iterable<T>
w tym scenariuszu, jakie kroki musimy wdrożyć? Proszę również zasugerować ten przykład.Jeśli kolekcja jest iterowalna, to można ją iterować za pomocą iteratora (i w konsekwencji można go użyć w pętli dla każdej). Iterator jest rzeczywistym obiektem, który będzie iterował przez kolekcję.
źródło
java.lang.Iterable
?java.lang.Iterable
Implementacja interfejsu Iterable pozwala obiektowi być celem instrukcji „foreach”.
Iterator to interfejs, który ma implementację do iteracji elementów. Iterable to interfejs zapewniający Iterator.
źródło
Najważniejszą kwestią jest to, czy dany przedmiot powinien być dostępny więcej niż jeden raz. Wynika to z faktu, że zawsze można przewinąć Iterator, wywołując ponownie iterator (), ale nie ma sposobu na przewinięcie Iteratora.
źródło
Jak wyjaśniono tutaj , „ Iterable ” został wprowadzony, aby móc używać go w
foreach
pętli. Klasa implementująca interfejs Iterable może być iterowana.Iterator jest klasa, która zarządza iteracji nad iterable . Utrzymuje stan, w którym znajdujemy się w bieżącej iteracji, i wie, jaki jest następny element i jak go uzyskać.
źródło
Rozważ przykład z 10 jabłkami. Kiedy implementuje Iterable, przypomina to umieszczenie każdego jabłka w pudełkach od 1 do 10 i zwrócenie iteratora, którego można użyć do nawigacji.
Wdrażając iterator, możemy uzyskać dowolne jabłko, jabłko w kolejnych polach itp.
Tak więc implementacja iterable daje iteratorowi nawigację po jego elementach, chociaż aby nawigować, iterator musi zostać zaimplementowany.
źródło
Pytanie: Różnica między Iterable i Iterator?
Odp .:
iterable: Jest powiązany z
iteratorem pętli forEach : Jest powiązany z kolekcją
Element docelowy pętli forEach powinien być powtarzalny.
Możemy użyć Iteratora, aby pobrać obiekt jeden po drugim z Kolekcji
Iterable obecny w pakiecie java.ḷang
Iterator obecny w pakiecie java.util
Zawiera tylko jedną metodę iteratora ()
Zawiera trzy metody hasNext (), next (), remove ()
Wprowadzono w wersji 1.5
Wprowadzono w wersji 1.2
źródło
Zasadniczo oba są ze sobą ściśle powiązane.
Rozważmy Iterator jako interfejs, który pomaga nam przechodzić przez kolekcję za pomocą niektórych niezdefiniowanych metod, takich jak hasNext (), next () i remove ()
Z drugiej strony, Iterable to kolejny interfejs, który, jeśli jest zaimplementowany przez klasę, wymusza klasę Iterable i jest celem dla konstrukcji For-Each. Ma tylko jedną metodę o nazwie iterator (), która pochodzi z samego interfejsu Iterator.
Gdy kolekcja jest iterowalna, można ją iterować za pomocą iteratora.
Dla zrozumienia odwiedź:
ITERABLE: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/Iterable.java
ITERATOR http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Iterator.java
źródło
Wiem, że to stare pytanie, ale dla każdego, kto czyta to pytanie, które utknęło z tym samym pytaniem i które może być przytłoczone całą terminologią, oto dobra, prosta analogia, która pomoże ci zrozumieć to rozróżnienie między iteratorami a iteratorami:
Pomyśl o bibliotece publicznej. Stara szkoła. Z papierowymi książkami. Tak, taka biblioteka.
Półka pełna książek przypominałaby iterację. Na półce widać długą linię książek. Możesz nie wiedzieć ile, ale możesz zobaczyć, że jest to długi zbiór książek.
Bibliotekarz byłby jak iterator. Może wskazać konkretną książkę w dowolnym momencie. Może wstawiać / usuwać / modyfikować / czytać książkę w miejscu, w którym wskazuje. Wskazuje kolejno każdą książkę za każdym razem, gdy krzyczysz „dalej!” do niego. Zwykle pytasz go: „ma Dalej?”, A on powie „tak”, na co mówisz „dalej!”. i wskaże następną książkę. Wie również, kiedy dotarł do końca półki, więc kiedy zapytasz: „ma Dalej?” powie „nie”.
Wiem, że to trochę głupie, ale mam nadzieję, że to pomoże.
źródło
Oprócz odpowiedzi ColinD i Seeker .
W prostych słowach Iterable i Iterator to interfejsy dostarczone w Java's Collection Framework.
Iterowalny
Klasa musi zaimplementować interfejs Iterable, jeśli chce mieć pętlę „ for-each” w celu iteracji swojej kolekcji. Jednak for-each pętli może być używany tylko do cyklu poprzez gromadzenie w kierunku do przodu i nie będzie mógł modyfikować elementy w tej kolekcji . Ale jeśli wszystko, czego chcesz, to odczyt danych elementów, to jest to bardzo proste, a dzięki wyrażeniu lambda Java jest to często jedna linijka. Na przykład:
Iterator
Ten interfejs umożliwia iterację kolekcji, uzyskiwanie i usuwanie jej elementów. Każda z klas kolekcji udostępnia metodę iteratora () , która zwraca iterator na początek kolekcji. Zaletą tego interfejsu nad iteracją jest to, że za pomocą tego interfejsu można dodawać, modyfikować lub usuwać elementy w kolekcji . Jednak dostęp do elementów wymaga nieco więcej kodu niż iteracji. Na przykład:
Źródła:
źródło
Iterable
zostały wprowadzone do użycia dla każdej pętli w javaIterator
to klasa zarządzająca iteracją nadIterable
. Utrzymuje stan, w którym znajdujemy się w bieżącej iteracji, i wie, jaki jest następny element i jak go uzyskać.źródło