Autor
Oleksandr Miadelets
Head of Developers Team at CodeGym

Iterator Javy

Opublikowano w grupie Random-PL
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.Jak korzystać z iteratora Java: krótki samouczek — 1

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…
Zawiera również różne interfejsy dla tych klas, takie jak Set , List , Queue , Dequeue i Sorted Set , aby wymienić tylko kilka. Iterator<E> jest publiczną metodą interfejsu klasy Interface Iterator<E> . Zostało wprowadzone w Javie 1.2 i zastąpiło Enumeration jako sposób na zbadanie kolejnych elementów w kolekcji.

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
Komentarze
  • Popularne
  • Najnowsze
  • Najstarsze
Musisz się zalogować, aby dodać komentarz
Ta strona nie ma jeszcze żadnych komentarzy