java iterator learn use iterators java with examples
W tym samouczku dowiemy się o iteratorach w Javie. Będziemy mieć szczegółową dyskusję na temat interfejsów Iterator i ListIterator w Javie:
W jednym z naszych poprzednich samouczków omówiliśmy wszystko na temat platformy Java Collection Framework i różnych pomocniczych interfejsów i klas.
Gdy masz kolekcję, chcesz uzyskać dostęp do jej elementów, dodać / usunąć lub przetworzyć elementy. Aby wykonać całe to przetwarzanie za pomocą programu Java, powinno być możliwe przejście przez używaną kolekcję. Tutaj pojawia się iterator.
Czego się nauczysz:
- Co to jest Iterator Java?
- Wniosek
Co to jest Iterator Java?
W Javie Iterator to konstrukcja używana do przechodzenia lub przechodzenia przez kolekcję.
Aby użyć Iteratora, musisz pobrać obiekt iteratora za pomocą „ iterator () ” metoda interfejsu kolekcji. Java Iterator to interfejs struktury kolekcji i jest częścią pakietu „java.util”. Używając Iteratora Java, możesz iterować przez kolekcję obiektów.
Interfejs Java Iterator zastępuje moduł wyliczający, który był wcześniej używany do przechodzenia przez niektóre proste kolekcje, takie jak wektory.
Główne różnice między Java Iterator i Enumerator to:
- Znaczna poprawa nazw metod.
- Możesz usunąć elementy metody z kolekcji, przez którą przechodzisz, za pomocą iteratora.
W tym samouczku omówimy szczegóły interfejsu Iteratora i interfejsu ListIterator, który jest interfejsem dwukierunkowym.
Typy iteratorów
- Enumerator
- Iterator
- ListIterator
Enumerator jest obecnie rzadko używany. Dlatego w naszej serii samouczków skupimy się na interfejsach Iterator i ListIterator.
Interfejs iteratora w Javie
Interfejs Iterator w Javie jest częścią struktury kolekcji w pakiecie „java.util” i jest kursorem, którego można używać do przechodzenia przez kolekcję obiektów.
Interfejs Iteratora ma następujące główne cechy:
- Interfejs Iterator jest dostępny w środowisku kolekcji Java 1.2 i nowszych.
- Przechodzi przez kolekcję obiektów jeden po drugim.
- Popularnie znany jako „Universal Java Cursor”, ponieważ działa ze wszystkimi kolekcjami.
- Ten interfejs obsługuje operacje „odczytu” i „usunięcia”, tj. Można usunąć element podczas iteracji za pomocą iteratora.
Ogólne przedstawienie interfejsu iteratora podano poniżej:
Następnie przyjrzyjmy się wymienionym powyżej metodom Iteratora.
Metody iteracyjne
Interfejs Iterator obsługuje następujące metody:
# 1) Dalej ()
Prototyp: E następny ()
Parametry: brak parametrów
Rodzaj zwrotu: E -> element
Opis: Zwraca następny element w kolekcji.
Jeśli iteracja (kolekcja) nie ma więcej elementów, to rzuca NoSuchElementException .
# 2) hasNext ()
Prototyp: boolean hasNext ()
Parametry: ZERO
Rodzaj zwrotu: true => w kolekcji są elementy.
Fałsz => nie ma więcej elementów
Opis: Funkcja hasNext () sprawdza, czy w kolekcji jest więcej elementów, do których uzyskiwany jest dostęp za pomocą iteratora. Jeśli nie ma więcej elementów, nie wywołujesz metody next (). Innymi słowy, za pomocą tej funkcji można zdecydować, czy ma zostać wywołana metoda next ().
# 3) usuń ()
Prototyp: void remove ()
Parametry: ZERO
Rodzaj zwrotu: ZERO
Opis: Usuwa ostatni element zwracany przez iterator iterujący po źródłowej kolekcji. Metodę remove () można wywołać tylko raz na każde wywołanie next ().
Jeśli iterator nie obsługuje operacji usuwania, to zgłasza UnSupportedOperationException . Rzuca IllegalStateException jeśli następna metoda nie została jeszcze wywołana.
# 4) forEachRemaining ()
Prototyp: void forEachRemaining (konsument super JEST > akcja)
Parametry: action => akcja do wykonania
Rodzaj zwrotu: unieważnić
Opis: Wykonuje określoną akcję na każdym z pozostałych elementów kolekcji, aż wszystkie elementy zostaną wyczerpane lub akcja zgłosi wyjątek. Wyjątki zgłoszone przez akcję są propagowane do obiektu wywołującego.
Jeśli akcja jest zerowa, podnosi się nullPointerException . Ta funkcja jest nowym dodatkiem do interfejsu Iterator w Javie 8.
Przykład iteratora Java
Zaimplementujmy program w języku Java, aby zademonstrować użycie interfejsu Iterator. Poniższy program tworzy ArrayList of flowers. Następnie pobiera iterator za pomocą metody iterator () klasy ArrayList. Następnie lista jest przeglądana, aby wyświetlić każdy element.
import java.util.*; public class Main { public static void main(String() args) { List flowers = new ArrayList(); flowers.add('Rose'); flowers.add('Jasmine'); flowers.add('sunflower'); // Get Iterator IteratorflowersIterator = flowers.iterator(); System.out.println('Contents of ArrayList:'); // Traverse elements using iterator while(flowersIterator.hasNext()){ System.out.print(flowersIterator.next() + ' '); } } }
Wynik:
Ograniczenia interfejsu iteratora
- Operacja zastąpienia elementu lub dodania nowego elementu nie może zostać wykonana za pomocą tego Iteratora.
- Iteracja przebiega tylko w jednym kierunku, tj. W kierunku do przodu.
- Obsługuje tylko sekwencyjną iterację.
- W przypadku iteracji dużych ilości danych wpływa to na wydajność Iteratora.
Iterator VsIterowalne
Chociaż interfejsy Iterable i Iterator brzmią podobnie, są zupełnie inne. Klasa, która implementuje interfejs iterowalny, uzyskuje możliwość iteracji po obiektach klasy, które używają interfejsu iteratora.
Poniżej podano niektóre z głównych różnic między tymi dwoma interfejsami, o których należy pamiętać:
Iterowalny interfejs | Interfejs iteratora |
---|---|
Reprezentuje kolekcję, przez którą można przejść za pomocą pętli foreach. | Pozwala na iterację po innej kolekcji. |
Klasa implementująca iterowalny interfejs musi przesłonić metodę iterator (). | metody hasNext () i next () interfejsu Iterator mają zostać przesłonięte przez klasę implementującą je. |
Nie przechowuje bieżącego stanu. | Przechowuje bieżący stan iteracji. |
Wystąpienie interfejsu iteratora powinno być tworzone za każdym razem, gdy wywoływana jest metoda iterator (). | Nie ma takiej umowy na interfejs iteratora. |
Porusza się tylko do przodu. | Porusza się w kierunku do przodu, a podinterfejsy, takie jak listIterator, obsługują przechodzenie dwukierunkowe. |
Nie zapewnia żadnej metody modyfikowania elementów podczas iteracji. | Zapewnia metodę usuwania, która może usunąć element podczas iteracji. |
Interfejs ListIterator w Javie
Interfejs ListIterator jest podinterfejsem interfejsu iteratora. Działa na kolekcjach typu list, takich jak listy typu Linkedlists, listy tablicowe itp. W ten sposób ten interfejs eliminuje wady interfejsu Iteratora.
Główne cechy interfejsu ListIterator obejmują:
- Interfejs ListIterator rozszerza interfejs Iterator.
- Interfejs ListIterator obsługuje operacje CRUD, tj. Tworzenie, odczytywanie, aktualizowanie i usuwanie.
- Obsługuje iterację w kierunku do przodu i do tyłu.
- Ponieważ ten interfejs jest dwukierunkowy, kursor jest zawsze umieszczony między poprzednim a następnym elementem.
- Ten interfejs działa głównie w przypadku implementacji list, takich jak ArrayList, LinkedList itp.
- Dostępne od wersji Java 1.2
Interfejs ListIterator jest przedstawiony jak pokazano poniżej:
Jak już wspomniano, interfejs ListIterator rozszerza interfejs Iterator. Tak więc oprócz obsługi wszystkich metod interfejsu iteratora, jak pokazano powyżej, interfejs ListIterator ma również własne metody, które pomagają mu wykonywać operacje CRUD, a także dwukierunkową iterację.
Omówmy szczegółowo metody ListIterator.
Metody ListIterator
Zauważ, że metody interfejsu Iterator, next (), hasNext () i remove (), działają dokładnie w taki sam sposób, jak interfejs ListIterator. Dlatego w tej sekcji pominiemy te metody. Oprócz wyżej wymienionych metod ListIterator ma następujące metody:
Poprzedni()
Prototyp: E poprzednia ()
Parametry: ZERO
Rodzaj zwrotu:
E- poprzedni element na liście.
- 1 - jeśli iterator znajduje się na początku listy.
Opis: Ta funkcja zwraca poprzedni element na liście. Po zwróceniu poprzedniego elementu kursor jest przesuwany wstecz do następnego elementu.
hasPrevious ()
Prototyp: boolean hasPrevious ()
Parametry: ZERO
Rodzaj zwrotu: true => iterator ma więcej elementów, gdy lista jest cofana.
Opis: Ta funkcja sprawdza, czy ListIterator ma więcej elementów w kierunku do tyłu.
previousIndex
Prototyp: int previousIndex ()
Parametry: ZERO
Rodzaj zwrotu:
int - indeks poprzedniego elementu
- 1 - jeśli wskaźnik znajduje się na początku listy.
Opis: Zwraca indeks poprzedniego elementu, który jest zwracany przez wywołanie previous ().
nextIndex
Prototyp: int nextIndex ()
Parametry: ZERO
Rodzaj zwrotu:
int - następny indeks
- 1 - jeśli iterator znajduje się na końcu listy.
Opis: Zwraca następny indeks elementu na liście. Ten element jest zwracany przez wywołanie metody next ().
zestaw()
Prototyp: void set (E i)
Parametry: e - element do wymiany
Rodzaj zwrotu: ZERO
Opis: Służy do zamiany ostatniego elementu na dany element e.
Dodaj()
Prototyp: nieważne dodać (E e)
Parametry: e - element do dodania
Rodzaj zwrotu: ZERO
Opis: Dodaje nowe elementy do listy na pozycji przed pozycją elementu next ().
Przykład iteratora listy
Teraz wiemy, czym jest ListIterator i jakie są obsługiwane przez niego różne metody. Przejdźmy dalej i zaimplementujmy program Java, aby zademonstrować ListIterator.
W tym programie użyliśmy ArrayList. Następnie używamy metod ListIterator, aby przechodzić przez listę w kierunku do przodu i do tyłu i wyświetlać dane wyjściowe.
import java.util.*; class Main { public static void main(String args()) { Listnum_list = new ArrayList(); // Add Elements to ArrayList num_list.add(1); num_list.add(3); num_list.add(5); num_list.add(7); num_list.add(9); // Creatinge a ListIterator ListIteratorlist_it = num_list.listIterator(); System.out.println('Output using forward iteration:'); while (list_it.hasNext()) System.out.print(list_it.next()+' ') ; System.out.print('Output using backward iteration:') ; while (list_it.hasPrevious()) System.out.print(list_it.previous()+' '); } }
Wynik:
Do tej pory omawialiśmy interfejsy, iterator i Listiterator, a następnie zobaczymy różne przykłady użycia tych interfejsów do przechodzenia przez różne kolekcje. Najpierw jednak przyjrzyjmy się przechodzeniu przez proste tablice, a następnie przejdźmy do innych kolekcji.
Array Iterator
W Javie istnieją dwa sposoby iteracji po elementach tablicy. Opiszmy sposoby korzystania z przykładów kodu.
# 1) dla pętli
To najprostszy sposób na iterację po tablicy. Używamy prostej pętli for, która będzie zwiększać indeks z każdą iteracją i wyświetlać jego zawartość.
import java.util.*; public class Main { public static void main(String() args) { int myArray() = {2,4,6,8,10,12,14}; int num; System.out.println('Array contents using for loop:'); for (int i = 0; i Wynik:
Powyższy program wyświetla zawartość tablicy za pomocą pętli for.
# 2) pętla forEach
To jest drugi sposób iteracji po tablicach. Tutaj używamy wyspecjalizowanej pętli for lub pętli „forEach”. Tutaj przechodzimy przez tablicę dla każdego elementu, a następnie wyświetlamy zawartość.
import java.util.*; public class Main { public static void main(String() args) { int myArray() = {2,4,6,8,10,12,14}; int num; System.out.println('Array contents using for each loop:'); for (int i :myArray) { // accessing each element of array num = i; System.out.print(num + ' '); } } }
Wynik:
ForEach jest bardziej zoptymalizowany w porównaniu do pętli for. Pisanie jest krótsze i szybsze.
ArrayList Iterator
Jeśli chcesz przejść przez kolekcję ArrayList, możesz to zrobić za pomocą interfejsu Iterator. Ponieważ iterator jest interfejsem, nie można go bezpośrednio utworzyć. Zamiast tego można użyć metody iterator () kolekcji ArrayList, aby uzyskać iterator, a następnie przejść przez listę.
Iterator iterator ();
Przykład pokazujący Iterator ArrayList.
import java.util.*; public class Main { public static void main(String() args) { ArrayListmyList = new ArrayList(); myList.add('Red'); myList.add('Green'); myList.add('Blue'); myList.add('Brown'); myList.add('Pink'); myList.add('Purple'); Iteratorlist_it = myList.iterator(); System.out.println('Elements in the arrayList:'); while(list_it.hasNext()) System.out.print(list_it.next() + ' '); } }
Wynik:
LinkedList Iterator
Przyjrzyjmy się teraz funkcjonalności iteratora w przypadku kolekcji LinkedList.
Kolekcja LinkedList obsługuje metodę listIterator (), która zwraca listIterator w celu przejścia przez połączoną listę.
Ogólny format tej funkcji to
ListIterator list_iter = LinkedList.listIterator (indeks int);
W tym przypadku indeks jest wartością całkowitą, która określa pozycję w kolekcji połączonej listy, od której ma się rozpocząć przemierzanie.
Rozumiemy iterator listy na połączonej liście z przykładowym programem. Zmodyfikowaliśmy ten sam program iteratora tablicy i zmieniliśmy go tak, aby zawierał listiterator z LinkedList.
import java.util.*; public class Main { public static void main(String() args) { LinkedListmyList = new LinkedList(); myList.add('Red'); myList.add('Green'); myList.add('Blue'); myList.add('Brown'); myList.add('Pink'); myList.add('Purple'); ListIteratorlist_it = myList.listIterator(0); System.out.println('Elements in the LinkedList:'); while(list_it.hasNext()) System.out.print(list_it.next() + ' '); } }
Wynik:
jak znaleźć kod bezpieczeństwa sieci
Java Map / Hashmap Iterator
Mapa lub jej odmiany, takie jak hashmap, treemap itp., Nie są kolekcjami. Dlatego nie możesz bezpośrednio użyć na nim metody iteratora. Zamiast tego należy iterować po wartościach wpisu klucza, aby odczytać pary klucz / wartość.
Chociaż możesz użyć różnych metod, takich jak forEach, pętla for itp., Aby iterować po wartościach mapy, użycie iteratora do iteracji przez wartości kluczowe jest najlepszą i wydajną metodą. Dodatkowo możesz również usuwać wpisy z mapy podczas iteracji, używając metody remove.
Przykład użycia Iteratora z HashMap.
import java.util.*; class Main { public static void main(String() arg) { MapmyMap = new HashMap(); // enter name/url pair myMap.put(1, 'India'); myMap.put(2, 'Nepal'); myMap.put(3, 'Maldives'); myMap.put(4, 'SriLanka'); System.out.println(' SAARC Member Countries '); System.out.println(' KEY' + ' ' + ' COUNTRY' ); // using iterators Iteratormap_itr = myMap.entrySet().iterator(); while(map_itr.hasNext()) { Map.Entrymap_entry = map_itr.next(); System.out.println(' ' + map_entry.getKey() + ' ' + map_entry.getValue()); } } }
Wynik:
W powyższym programie zdefiniowaliśmy mapę z kluczami całkowitymi i wartościami typu string. Następnie definiujemy iterator na mapie. Wprowadź i wyświetl pary klucz / wartość.
Iterator zestawu Java
Metoda iterator () Java.util.set służy do uzyskania iteratora, który zwraca elementy w zestawie w losowej kolejności.
Iterator set_iterator = Set.iterator();
„Set_iterator” iteruje po różnych elementach zestawu i zwraca ich wartości.
W podobny sposób zestaw skrótów zawiera również funkcję iteratora, która zwraca iterator, taki jak iterator zestawu.
Iterator hashset_iterator = Hash_Set.iterator();
Poniżej podano przykład programowania, aby zademonstrować iterator zestawu.
import java.util.*; public class Main { public static void main(String args()) { HashSetsports_set = new HashSet(); sports_set.add('Hocky'); sports_set.add('Kabaddi'); sports_set.add('Football'); sports_set.add('Badminton'); sports_set.add('Cricket'); System.out.println('Sports HashSet: ' + sports_set); // Creating an iterator Iterator hashset_iter = sports_set.iterator(); // Displaying the values after iterating through the set System.out.println('SportsSet iterator values:'); while (hashset_iter.hasNext()) { System.out.println(hashset_iter.next()); } } }
Wynik:
Ta implementacja używa Iterator HashSet i wyświetla poszczególne wartości, wykonując iterację po elementach HashSet.
Iterator vs ListIterator
Przedstawmy w tabeli główne różnice między interfejsami Iterator i ListIterator.
Iterator ListIterator Może przechodzić przez wszystkie kolekcje, w tym zestaw, mapę itp. Może być używany do przechodzenia tylko po kolekcjach typów list, takich jak ArrayList, LinkedList. Iteruje kolekcję tylko w kierunku do przodu. Potrafi iterować po kolekcji zarówno w kierunku do przodu, jak i do tyłu. Nie można uzyskać indeksów. Potrafi uzyskać indeksy. Nie ma możliwości dodania nowych elementów do kolekcji. Możesz dodawać nowe elementy do kolekcji. Iterator nie może modyfikować elementów podczas iteracji. ListIterator może modyfikować elementy w kolekcji przy użyciu metody set ().
Często Zadawane Pytania
Pytanie 1) Jaka jest iteracja w Javie?
Odpowiedź: Iteracja to proces, w którym blok kodu jest powtarzany, dopóki dany warunek nie zostanie spełniony lub nie będzie istniał. Używając iteracji, możesz przechodzić przez sekwencję elementów lub przetwarzać dane.
Q # 2) Ile typów Iteratorów występuje w Javie?
Odpowiedź: Iteratory są używane do przechodzenia przez kolekcje w Javie.
W Javie istnieją trzy typy iteratorów:
- Enumerators
- Iteratory
- ListIterators
Pytanie 3) Jak używać Iteratora w Javie?
Odpowiedź: Aby użyć iteratora do przechodzenia przez kolekcję, najpierw musisz pobrać iterator za pomocą metody iterator () określonej kolekcji.
Następnie możesz użyć metod hasNext () i next () iteratora, aby pobrać element.
P # 4) Dlaczego zamiast pętli for używa się Iteratora?
Odpowiedź: Zarówno iterator, jak i pętla for są używane do wielokrotnego wykonywania określonego bloku kodu. Ale główna różnica polega na tym, że w pętli for nie można zmieniać ani modyfikować zawartości kolekcji. Nawet jeśli spróbujesz go zmodyfikować, zgłosi on wyjątek concurrentModificationException. Za pomocą iteratora możesz usunąć element z kolekcji.
P # 5) Dlaczego potrzebujemy Iteratora w Javie?
Odpowiedź: Iterator pomaga odzyskać elementy w kolekcji lub kontenerze bez konieczności znajomości przez programistę wewnętrznej struktury lub działania kolekcji. Są bardziej eleganckie, zużywają mniej pamięci, a programista jest oszczędzany przy pisaniu długiego kodu.
Po drugie, elementy mogą być przechowywane w kolekcji w dowolny sposób, ale za pomocą iteratora programista może je pobrać, tak jak listę lub jakąkolwiek inną sekwencję.
Wniosek
Omówiliśmy iteratory w Javie, które są używane z kolekcjami w tym samouczku. Ta wiedza na temat iteratorów pomoże czytelnikom zrozumieć zbiory, których będziemy się uczyć w naszych kolejnych samouczkach.
rekomendowane lektury
- Interfejs Java i samouczek klasy abstrakcyjnej z przykładami
- Samouczek JAVA dla początkujących: ponad 100 praktycznych samouczków wideo Java
- Wdrażanie Java: tworzenie i wykonywanie pliku Java JAR
- Słowo kluczowe „this” w języku Java: samouczek z przykładami kodu
- Wirtualna maszyna Java: jak JVM pomaga w uruchamianiu aplikacji Java
- Modyfikatory dostępu w Javie - samouczek z przykładami
- Samouczek dotyczący refleksji w języku Java z przykładami
- C ++ Vs Java: 30 najważniejszych różnic między C ++ a Javą z przykładami