CodeGym /Java blogg /Slumpmässig /Java Iterator
John Squirrels
Nivå
San Francisco

Java Iterator

Publicerad i gruppen
Hej! I dagens lektion kommer vi att prata om Java Iterator. Föreställ dig att du går till biblioteket och vill hitta en viss bok. Hur gör du det? Om det är facklitteratur så finns det Deweys decimalsystem. Om det är fiktion sorteras de i alfabetisk ordning efter deras efternamn. Vad du än letar efter måste du någon gång gå igenom böckerna en i taget tills du hittar det du letar efter. Närhelst du har en samling saker i Java, oavsett om den är lagrad i en Array , en ArrayList , en Queue eller en List , hur hittar du ett särskilt värde? Vid något tillfälle måste du gå igenom varje element ett i taget. Detta är vad en Java-iterator är till för.Hur man använder en Java Iterator: En kort handledning - 1

Vad är en Iterator i Java

Vad är en iterator i Java? Det är ett sätt att se på varje element i en samling. Och med insamling menar vi vad som helst i samlingsklassen . Detta inkluderar:
  • ArrayList
  • HashSet
  • LinkedHashSet
  • Länkad lista
  • Prioritetskö
  • Vektor
  • och många andra…
Den innehåller också de olika gränssnitten för dessa klasser, som Set , List , Queue , Dequeue och Sortered Set , för att nämna några. Iterator<E> är den offentliga gränssnittsmetoden för klassen Interface Iterator<E> . Det skapades i Java 1.2 och ersatte Enumeration som ett sätt att undersöka sekventiella element i en samling.

Varför du inte bör använda för loopar som en iterator i Java

Ett av de första sätten som alla lärs att iterera genom en samling i Java är för en loop. Det ser ut så här:

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]);
    }
  }
}
Utdata skulle vara en lista som lyder:

Content of element 0 is: 0
Content of element 1 is: 1
Content of element 2 is: 2
etc.…
Detta har sina användningsområden, men vad händer om samlingen inte lagrar element i ett indexbaserat system? Till exempel har Set s ingen ordning normalt. Så det är tillrådligt att sluta öva på att använda en for-loop som en iterator i Java och öva på att använda klassen Iterator<E> istället. Här är några exempel på java iterator.

Hur man använder Iterator i Java

Här är några exempel på hur man använder iterator i Java. När du använder iteratorklassen finns det tre sätt att gå igenom en samling. Du kan använda en while()- loop, en for() -loop och en forEach()- loop. Observera att detta för loop skiljer sig från det vi pratade om tidigare. Här är de tre olika java iterator-exemplen. Låt oss först ställa in samlingen så att den går igenom.

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");
  }
}
Detta är en enkel samling som består av en ArrayList till vilken vi laddade fyra objekt. Låt oss nu titta på de tre metoderna för att använda Iterator-klassen för att gå igenom ArrayList .

While() loop


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

while (iterator.hasNext()) {
   System.out.println("Element Value= " + iterator.next());
}
Denna while() -loop använder den booleska metoden .hasNext() i klassen Iterator för att kontrollera om det finns ett framtida element. Om förutsättningen är sann, så fortsätter det. Om det returnerar som falskt, slutar slingan. Nyckeldelen här är att metoderna .hasNext() och .next() båda gör en första kontroll av det första elementet. Om samlingen är tom och det inte finns något första element, returnerar metoden false för .hasNext() och kommer att kasta ett NoSuchElementException för metoden .next() .

För loop


for (Iterator<String> iterator = example.iterator(); iterator.hasNext();) {
  System.out.println("Element Value= " + iterator.next());
}
Detta ser ut som en mer traditionell för loop. Den använder metoden .hasNext() som tillståndskontroll och ändringsdel. Initieringen är anropet till Iteratorn.

För: Varje slinga


for (String s : example) {
  System.out.println("Element Value= " + s);
}
For :Each loop är en for loop, men om du inte vet hur man läser den kan det vara lite förvirrande. Syntaxen för en For:Each- loop är för (data_type variableName : collectionName){ body} . Detta för: varje slinga har ett par nackdelar. För det första kan den bara korsa samlingen i en riktning. För det andra måste du iterera genom varje element. Du kan inte hoppa över någon av dem. Men som en bekväm listiterator i Java är det det bästa alternativet. På plussidan är for:each- slingan väldigt lätt att läsa och när du väl vet det är det svårt att få fel. Om du undrar vad resultatet av de tre iteratorslingorna är, är de alla lika:

Element Value= Item 1
Element Value= Item 2
Element Value= Item 3
Element Value= Item 4 

Hur man använder en Iterator i Java för kartor

Kartor är ett populärt sätt att lagra data på, men eftersom de inte utökar Collection kan du inte använda de tidigare iteratorerna för att direkt gå igenom en karta. Så hur använder du en iterator i Java för att gå igenom Map s och HashMap s? Det finns fyra bra Java-kartiteratormetoder. Vi täcker dem individuellt. Låt oss först ladda en karta med en serie värden.

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-metod: forEach(action)


example.forEach((k,v) -> System.out.println("Key: "+ k + ", Value: " + v));
Denna metod använder ett lambda-uttryck för att iterera igenom. Lambda-operatorn är metoden forEach() och kroppen skriver ut värdena. Detta använder en operator med flera parametrar. Detta är den snabbaste och renaste metoden för kartiterator i Java 8.

Java Hashmap Iterator Metod: For:Each() Loop


for (Map.Entry<String, String> iterate : example.entrySet()) {
  System.out.println("Key: " + iterate.getKey() + ", Value: " + iterate.getValue());
}
Detta använder For:Each- syntaxen för att anropa metoden entrySet() för att returnera en uppsättning som har nyckeln och värdet som element. Dessutom, när du använder metoden .Entry() är objekten bara sanna medan denna iteration pågår.

Java Hashmap Iterator-metod: 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());
)
Den här metoden konverterar kartan igen till en uppsättning för att använda Samlings Iterator och metoder. För dessa tre iteratormetoder ser returen ut så här:

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);
}
Den här returnerar elementen på ett annat sätt. Det kommer först att returnera alla nycklar i ordning och sedan alla värden:

Key: alpha
Key: beta
Key: gamma
Value: one
Value: two
Value: three
Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION