John Squirrels
Niveau
San Francisco

Java Iterator

Udgivet i gruppen
Hej! I dagens lektion vil vi tale om Java Iterator. Forestil dig, at du går på biblioteket, og du vil finde en bestemt bog. Hvordan gør du det? Hvis det er faglitteratur, er der Dewey Decimal System. Hvis det er fiktion, er de sorteret i alfabetisk rækkefølge efter deres efternavn. Uanset hvad du leder efter, skal du på et tidspunkt gennemgå bøgerne en ad gangen, indtil du finder det, du leder efter. Når du har en samling af ting i Java, hvad enten den er gemt i en Array , en ArrayList , en Queue eller en List , hvordan finder du en bestemt værdi? På et tidspunkt skal du gennemgå hvert element et ad gangen. Det er hvad en Java iterator er til.Sådan bruger du en Java Iterator: En kort vejledning - 1

Hvad er en Iterator i Java

Hvad er en iterator i Java? Det er en måde at se på hvert element i en samling. Og med indsamling mener vi alt i klassen Indsamling . Dette omfatter:
  • ArrayList
  • HashSet
  • LinkedHashSet
  • LinkedList
  • Prioritetskø
  • Vektor
  • og mange andre…
Det inkluderer også de forskellige grænseflader for disse klasser, såsom Set , List , Queue , Dequeue og Sorted Set , for at nævne nogle få. Iterator<E> er den offentlige grænseflademetode for Interface Iterator<E> -klassen. Det blev skabt i Java 1.2 og erstattede Enumeration som en måde at undersøge sekventielle elementer i en samling.

Hvorfor du ikke bør bruge til loops som en iterator i Java

En af de første måder, som alle bliver lært at iterere gennem en samling i Java, er en loop. Det ser sådan ud:
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]);
    }
  }
}
Outputtet ville være en liste, der lyder:
Content of element 0 is: 0
Content of element 1 is: 1
Content of element 2 is: 2
etc.…
Dette har sine anvendelser, men hvad sker der, hvis samlingen ikke gemmer elementer i et indeksbaseret system? For eksempel har sæt ikke nogen rækkefølge normalt. Så det er tilrådeligt at komme ud af øvelsen med at bruge en for loop som en iterator i Java og øve sig i at bruge Iterator <E> -klassen i stedet. Her er nogle eksempler på java iterator.

Sådan bruger du Iterator i Java

Her er nogle eksempler på, hvordan man bruger iterator i Java. Når du bruger iterator-klassen, er der tre måder at krydse en samling på. Du kan bruge en while()- løkke, en for() -løkke og en forEach()- løkke. Bemærk, at denne for loop er forskellig fra den, vi talte om før. Her er de tre forskellige java iterator eksempler. Lad os først konfigurere samlingen til at gentage den.
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 simpel samling , der består af en ArrayList , som vi har indlæst fire elementer til. Lad os nu se på de tre metoder til at bruge Iterator-klassen til at krydse ArrayList .

While() loop

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

while (iterator.hasNext()) {
   System.out.println("Element Value= " + iterator.next());
}
Denne while()- løkke bruger den boolske .hasNext()- metode fra Iterator- klassen til at kontrollere, om der er et fremtidigt element. Hvis forudsætningen er sand, så fortsætter den. Hvis det vender tilbage som falsk, slutter løkken. Nøglen her er, at .hasNext()- og .next()- metoderne begge udfører en indledende kontrol af det første element. Hvis samlingen er tom, og der ikke er noget første element, returnerer metoden false for .hasNext () og vil kaste en NoSuchElementException for .next() metoden.

Til sløjfe

for (Iterator<String> iterator = example.iterator(); iterator.hasNext();) {
  System.out.println("Element Value= " + iterator.next());
}
Dette ligner en mere traditionel for loop. Den bruger metoden .hasNext() som tilstandskontrol- og ændringsdelen. Initialiseringen er opkaldet til iteratoren.

For: Hver sløjfe

for (String s : example) {
  System.out.println("Element Value= " + s);
}
For :Each- løkken er en for-løkke, men hvis du ikke ved, hvordan den skal læses, kan den være lidt forvirrende. Syntaksen for en For:Each- løkke er for (data_type variableName : collectionName){ body} . Dette for:hver sløjfe har et par ulemper. For det første kan den kun krydse samlingen i én retning. For det andet skal du gentage hvert element. Du kan ikke springe nogen af ​​dem over. Men som en praktisk listeiterator i Java er det den bedste mulighed. På plussiden er for:each -løkken meget let at læse, og når du først ved det, er det svært at tage fejl. Hvis du undrer dig over, hvad outputtet af de tre iterator-løkker er, er de alle ens:
Element Value= Item 1
Element Value= Item 2
Element Value= Item 3
Element Value= Item 4

Sådan bruger du en iterator i Java til kort

Kort er en populær måde at gemme data på, men fordi de ikke udvider Collection , kan du ikke bruge de tidligere iteratorer til direkte at krydse et kort. Så hvordan bruger du en iterator i Java til at gå gennem Map s og HashMap s? Der er fire gode Java map iterator metoder. Vi dækker dem individuelt. Lad os først indlæse et kort med en række værdier.
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 metode bruger et lambda-udtryk til at iterere igennem. Lambda-operatoren er forEach()- metoden, og kroppen udskriver værdierne. Dette bruger en operator med flere parametre. Dette er den hurtigste og reneste metode til kort iterator 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 bruger For:Each- syntaksen til at kalde entrySet() -metoden for at returnere et sæt, der har nøglen og værdien som sine elementer. Derudover, når du bruger .Entry()- metoden, er objekterne kun sande, mens denne iteration finder sted.

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 metode konverterer igen kortet til et sæt for at bruge Collections Iterator og metoder. For disse tre iteratormetoder ser returneringen sådan ud:
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 elementerne på en anden måde. Det vil først returnere alle nøglerne i rækkefølge og derefter alle værdierne:
Key: alpha
Key: beta
Key: gamma
Value: one
Value: two
Value: three
Kommentarer
  • Populær
  • Ny
  • Gammel
Du skal være logget ind for at skrive en kommentar
Denne side har ingen kommentarer endnu