John Squirrels
Nivå
San Francisco

Java Iterator

Publisert i gruppen
Hei! I dagens leksjon skal vi snakke om Java Iterator. Tenk deg at du går til biblioteket, og du vil finne en bestemt bok. Hvordan gjør du det? Hvis det er sakprosa, er det Deweys desimalsystem. Hvis det er fiksjon, er de sortert i alfabetisk rekkefølge etter etternavnet. Uansett hva du leter etter, på et tidspunkt, må du gå gjennom bøkene en om gangen til du finner det du leter etter. Når du har en samling av ting i Java, enten den er lagret i en Array , en ArrayList , en Queue eller en List , hvordan finner du spesiell verdi? På et tidspunkt må du gå gjennom hvert element ett om gangen. Dette er hva en Java-iterator er for.Hvordan bruke en Java Iterator: En kort veiledning - 1

Hva er en iterator i Java

Hva er en iterator i Java? Det er en måte å se på hvert element i en samling. Og med innsamling mener vi hva som helst i samlingsklassen . Dette inkluderer:
  • ArrayList
  • HashSet
  • LinkedHashSet
  • LinkedList
  • Prioritetskø
  • Vektor
  • og mange andre…
Den inkluderer også de ulike grensesnittene for disse klassene, for eksempel Set , List , Queue , Dequeue og Sortered Set , for å nevne noen. Iterator<E> er den offentlige grensesnittmetoden til Interface Iterator<E> -klassen. Det ble opprettet i Java 1.2 og erstattet Enumeration som en måte å undersøke sekvensielle elementer i en samling.

Hvorfor du ikke bør bruke for loops som en iterator i Java

En av de første måtene som alle blir lært å iterere gjennom en samling i Java, er for en loop. Det ser slik ut:
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]);
    }
  }
}
Utgangen vil være en liste som lyder:
Content of element 0 is: 0
Content of element 1 is: 1
Content of element 2 is: 2
etc.…
Dette har sine bruksområder, men hva skjer hvis samlingen ikke lagrer elementer i et indeksbasert system? For eksempel har sett ingen rekkefølge normalt. Så det er tilrådelig å slutte med å bruke en for-løkke som en iterator i Java og øve på å bruke Iterator <E> -klassen i stedet. Her er noen eksempler på java iterator.

Hvordan bruke Iterator i Java

Her er noen eksempler på hvordan du bruker iterator i Java. Når du bruker iteratorklassen, er det tre måter å krysse en samling på. Du kan bruke en while()- løkke, en for() -løkke og en forEach()- løkke. Merk at denne for loop er forskjellig fra den vi snakket om før. Her er de tre forskjellige java iterator-eksemplene. Først, la oss sette opp samlingen for å iterere gjennom.
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");
  }
}
Dette er en enkel samling som består av en ArrayList som vi lastet fire elementer til. La oss nå se på de tre metodene for å bruke Iterator-klassen for å krysse ArrayList .

While() loop

Iterator<String> iterator = example.iterator();

while (iterator.hasNext()) {
   System.out.println("Element Value= " + iterator.next());
}
Denne while() -løkken bruker den boolske metoden .hasNext() i Iterator -klassen for å sjekke om det er et fremtidig element. Hvis forutsetningen er sann, fortsetter den. Hvis den returnerer som usann, avsluttes løkken. Nøkkeldelen her er at .hasNext ()- og .next()- metodene begge utfører en innledende sjekk av det første elementet. Hvis samlingen er tom og det ikke er noe første element, returnerer metoden false for .hasNext () og vil kaste en NoSuchElementException for .next()- metoden.

For loop

for (Iterator<String> iterator = example.iterator(); iterator.hasNext();) {
  System.out.println("Element Value= " + iterator.next());
}
Dette ser ut som en mer tradisjonell for loop. Den bruker .hasNext() -metoden som tilstandssjekk- og endringsdelen. Initialiseringen er kallet til iteratoren.

For: Hver sløyfe

for (String s : example) {
  System.out.println("Element Value= " + s);
}
For :Each- løkken er en for-løkke, men hvis du ikke vet hvordan du skal lese den, kan den være litt forvirrende. Syntaksen til en For:Each- løkke er for (data_type variableName : collectionName){ body} . Dette for:hver sløyfe har et par ulemper. For det første kan den bare krysse samlingen i én retning. For det andre må du iterere gjennom hvert element. Du kan ikke hoppe over noen av dem. Men som en praktisk listeiterator i Java, er det det beste alternativet. På plussiden er for:each- løkken veldig lett å lese, og når du først vet det, er det vanskelig å ta feil. Hvis du lurer på hva utgangen til de tre iteratorløkkene er, er de alle like:
Element Value= Item 1
Element Value= Item 2
Element Value= Item 3
Element Value= Item 4

Hvordan bruke en iterator i Java for kart

Kart er en populær måte å lagre data på, men fordi de ikke utvider Samling , kan du ikke bruke de tidligere iteratorene til å krysse et kart direkte. Så hvordan bruker du en iterator i Java for å gå gjennom Maps og HashMaps ? Det er fire gode Java-kartiteratormetoder. Vi dekker dem individuelt. La oss først laste inn et kart med en rekke verdier.
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");

  }
}

Java Hashmap Iterator-metode: forEach(action)

example.forEach((k,v) -> System.out.println("Key: "+ k + ", Value: " + v));
Denne metoden bruker et lambda-uttrykk for å iterere gjennom. Lambda-operatoren er forEach()- metoden, og kroppen skriver ut verdiene. Dette bruker en operatør med flere parametere. Dette er den raskeste og reneste metoden for kartiterator i Java 8.

Java Hashmap Iterator Metode: For:Each() Loop

for (Map.Entry<String, String> iterate : example.entrySet()) {
  System.out.println("Key: " + iterate.getKey() + ", Value: " + iterate.getValue());
}
Dette bruker For:Each- syntaksen til å kalle opp entrySet() -metoden for å returnere et sett som har nøkkelen og verdien som elementer. I tillegg, når du bruker .Entry()- metoden, er objektene bare sanne mens denne iterasjonen skjer.

Java Hashmap Iterator Metode: 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());
)
Denne metoden konverterer igjen kartet til et sett for å bruke Collections Iterator og metoder. For disse tre iteratormetodene ser returen slik ut:
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);
}
Denne returnerer elementene på en annen måte. Den vil først returnere alle nøklene i rekkefølge og deretter alle verdiene:
Key: alpha
Key: beta
Key: gamma
Value: one
Value: two
Value: three
Kommentarer
  • Populær
  • Ny
  • Gammel
Du må være pålogget for å legge igjen en kommentar
Denne siden har ingen kommentarer ennå