Cześć! W dzisiejszej lekcji porozmawiamy o Java Iterator. Wyobraź sobie, że idziesz do biblioteki i chcesz znaleźć konkretną książkę. Jak ty to robisz? Jeśli to literatura faktu, istnieje system dziesiętny Deweya. Jeśli to fikcja, są posortowani alfabetycznie według nazwiska. Czegokolwiek szukasz, w pewnym momencie musisz przeglądać książki jedna po drugiej, aż znajdziesz to, czego szukasz. Ilekroć masz kolekcję rzeczy w Javie, niezależnie od tego, czy jest ona przechowywana w Array , ArrayList , Queue czy List , jak znaleźć określoną wartość? W pewnym momencie musisz przejść przez każdy element po kolei. Do tego służy iterator Java.

Co to jest iterator w Javie
Co to jest iterator w Javie? Jest to sposób patrzenia na każdy element w kolekcji. A przez kolekcję rozumiemy wszystko, co należy do klasy Collection . To zawiera:- lista tablic
- HashSet
- LinkedHashSet
- Połączona lista
- Kolejka priorytetowa
- Wektor
- i wiele innych…
Dlaczego nie powinieneś używać pętli For jako iteratora w Javie
Jednym z pierwszych sposobów, w jaki każdy uczy się iteracji w kolekcji w Javie, jest pętla. To wygląda tak:
class Main {
public static void main(String[] args) {
int exampleArray[] = new int[10];
//fill array with data
for(int x = 0; x < exampleArray.length; x++) {
System.out.println("Content of element " + x + "is: " + exampleArray[x]);
}
}
}
Wynikiem byłaby lista, która brzmi:
Content of element 0 is: 0
Content of element 1 is: 1
Content of element 2 is: 2
etc.…
To ma swoje zastosowania, ale co się stanie, jeśli kolekcja nie przechowuje elementów w systemie opartym na indeksie? Na przykład Set s nie ma zwykle kolejności. Dlatego wskazane jest, aby wyjść z praktyki używania pętli for jako iteratora w Javie i zamiast tego ćwiczyć używanie klasy Iterator<E> . Oto kilka przykładów iteratorów Java.
Jak używać Iteratora w Javie
Oto kilka przykładów użycia iteratora w Javie. Podczas korzystania z klasy iteratora istnieją trzy sposoby przechodzenia przez kolekcję. Możesz użyć pętli while() , pętli for() i pętli forEach() . Zauważ, że ta pętla for różni się od tej, o której mówiliśmy wcześniej. Oto trzy różne przykłady iteratorów Java. Najpierw skonfigurujmy Collection do iteracji.
import java.util.*; // imports ArrayList, Collection and Iterator
class Main {
public static void main(String[] args) {
Collection<String> example = new ArrayList<String>();
example.add("Item 1");
example.add("Item 2");
example.add("Item 3");
example.add("Item 4");
}
}
Jest to prosta kolekcja złożona z tablicy ArrayList , do której załadowaliśmy cztery elementy. Przyjrzyjmy się teraz trzem metodom użycia klasy Iterator do przechodzenia przez ArrayList .
Pętla while().
Iterator<String> iterator = example.iterator();
while (iterator.hasNext()) {
System.out.println("Element Value= " + iterator.next());
}
Ta pętla while() używa metody boolowskiej .hasNext() klasy Iterator , aby sprawdzić, czy istnieje element przyszłości. Jeśli warunek wstępny jest spełniony, następuje kontynuacja. Jeśli zwróci wartość false, pętla się kończy. Kluczową częścią jest tutaj to, że metody .hasNext() i .next() wykonują wstępne sprawdzenie pierwszego elementu. Jeśli kolekcja jest pusta i nie ma pierwszego elementu, metoda zwraca wartość false dla metody .hasNext() i zgłasza wyjątek NoSuchElementException dla metody .next() .
Dla pętli
for (Iterator<String> iterator = example.iterator(); iterator.hasNext();) {
System.out.println("Element Value= " + iterator.next());
}
Wygląda to na bardziej tradycyjną pętlę for. Wykorzystuje metodę .hasNext() jako część sprawdzania i zmiany warunków. Inicjalizacja to wywołanie Iteratora.
Dla:Każda pętla
for (String s : example) {
System.out.println("Element Value= " + s);
}
Pętla For:Each jest pętlą for, ale jeśli nie wiesz, jak ją odczytać, może to być nieco mylące. Składnia pętli For:Each to for (data_type nazwa_zmiennej : nazwa_kolekcji){ body} . Ta pętla for:each ma kilka wad. Po pierwsze, może przechodzić przez kolekcję tylko w jednym kierunku. Po drugie, musisz iterować przez każdy element. Nie możesz pominąć żadnego z nich. Ale jako wygodny iterator list w Javie jest to najlepsza opcja. Plusem jest to, że pętla for:each jest bardzo łatwa do odczytania, a kiedy już ją znasz, trudno się pomylić. Jeśli zastanawiasz się, jaki jest wynik trzech pętli iteratora, wszystkie są takie same:
Element Value= Item 1
Element Value= Item 2
Element Value= Item 3
Element Value= Item 4
Jak używać iteratora w Javie dla map
Mapy są popularnym sposobem przechowywania danych, ale ponieważ nie rozszerzają Collection , nie można użyć poprzednich iteratorów do bezpośredniego przechodzenia przez mapę. Jak więc używać iteratora w Javie do przeglądania Map s i HashMap s? Istnieją cztery dobre metody iteratora map Java. Omówimy je indywidualnie. Najpierw załadujmy mapę z serią wartości.
import java.util.*; //imports Map and HashMap
class Main {
public static void main(String[] args) {
Map<String, String> example = new HashMap<String, String>();
example.put("alpha", "one");
example.put("beta", "two");
example.put("gamma", "three");
}
}
Metoda iteratora Java Hashmap: forEach(action)
example.forEach((k,v) -> System.out.println("Key: "+ k + ", Value: " + v));
Ta metoda używa wyrażenia lambda do iteracji. Operatorem lambda jest metoda forEach() , a treść wypisuje wartości. Wykorzystuje to operator wielu parametrów. Jest to najszybsza i najczystsza metoda dla iteratora map w Javie 8.
Metoda iteratora Java Hashmap: Pętla For:Each().
for (Map.Entry<String, String> iterate : example.entrySet()) {
System.out.println("Key: " + iterate.getKey() + ", Value: " + iterate.getValue());
}
Używa składni For:Each do wywołania metody entrySet() w celu zwrócenia zestawu, którego elementami są klucz i wartość. Ponadto w przypadku korzystania z metody .Entry() obiekty są prawdziwe tylko podczas wykonywania tej iteracji.
Metoda Java Hashmap Iterator: Map.Entry<k, v>
Iterator<Map.Entry<String, String>> iterator = example.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<String, String> element = iterator.next();
System.out.println("Key: " + element.getKey() + ", Value: " + element.getValue());
)
Ta metoda ponownie konwertuje mapę na zestaw, aby używać iteratora kolekcji i metod. Dla tych trzech metod iteracyjnych zwrot wygląda następująco:
Key: alpha, Value: one
Key: beta, Value: two
Key: gamma, Value: three
Java Hashmap Iterator Method: keySet() and values()
for (String key : example.keySet()) {
System.out.println("Key: " + key);
}
for (String value : example.values()) {
System.out.println("Value: " + value);
}
Ten zwraca elementy w inny sposób. Najpierw zwróci wszystkie klucze w kolejności, a następnie wszystkie wartości:
Key: alpha
Key: beta
Key: gamma
Value: one
Value: two
Value: three
GO TO FULL VERSION