John Squirrels
Niveau 41
San Francisco

Java-iterator

Gepubliceerd in de groep Willekeurig
Hoi! In de les van vandaag zullen we het hebben over Java Iterator. Stel je voor dat je naar de bibliotheek gaat en je wilt een bepaald boek vinden. Hoe doe je het? Als het non-fictie is, is er het Dewey Decimal System. Als het fictie is, zijn ze alfabetisch gesorteerd op achternaam. Waar je ook naar op zoek bent, op een gegeven moment zul je de boeken één voor één moeten doornemen totdat je vindt wat je zoekt. Wanneer je een verzameling dingen in Java hebt, of het nu is opgeslagen in een Array , een ArrayList , een Queue of een List , hoe vind je een bepaalde waarde? Op een gegeven moment moet je elk element één voor één doorlopen. Dit is waar een Java-iterator voor is.Een Java-iterator gebruiken: een korte zelfstudie - 1

Wat is een Iterator in Java

Wat is een iterator in Java? Het is een manier om naar elk element in een verzameling te kijken. En met collectie bedoelen we alles in de collectieklasse . Dit bevat:
  • ArrayLijst
  • HashSet
  • LinkedHashSet
  • Gelinkte lijst
  • Prioriteits-rij
  • Vector
  • en vele anderen…
Het bevat ook de verschillende interfaces voor die klassen, zoals Set , List , Queue , Dequeue en Sorted Set , om er maar een paar te noemen. Iterator<E> is de openbare interfacemethode van de klasse Interface Iterator<E> . Het kwam tot stand in Java 1.2 en verving Enumeration als een manier om sequentiële elementen in een verzameling te onderzoeken.

Waarom u For Loops niet als iterator in Java zou moeten gebruiken

Een van de eerste manieren waarop iedereen wordt geleerd om door een verzameling in Java te itereren, is voor een lus. Het ziet er zo uit:
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]);
    }
  }
}
De uitvoer zou een lijst zijn die luidt:
Content of element 0 is: 0
Content of element 1 is: 1
Content of element 2 is: 2
etc.…
Dit heeft zijn nut, maar wat gebeurt er als de collectie geen elementen opslaat in een op indexen gebaseerd systeem? Set s hebben bijvoorbeeld normaal geen volgorde. Het is dus raadzaam om af te stappen van het gebruik van een for-lus als iterator in Java en in plaats daarvan te oefenen met het gebruik van de Iterator<E> -klasse. Hier zijn enkele Java-iteratorvoorbeelden.

Hoe Iterator in Java te gebruiken

Hier zijn enkele voorbeelden van het gebruik van iterator in Java. Bij gebruik van de iteratorklasse zijn er drie manieren om een ​​verzameling te doorkruisen. U kunt een while()- lus, een for() -lus en een forEach()- lus gebruiken. Merk op dat deze for-lus anders is dan degene waar we het eerder over hadden. Hier zijn de drie verschillende Java-iteratorvoorbeelden. Laten we eerst de collectie instellen om doorheen te itereren.
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");
  }
}
Dit is een eenvoudige verzameling die bestaat uit een ArrayList waarin we vier items hebben geladen. Laten we nu eens kijken naar de drie methoden om de Iterator-klasse te gebruiken om de ArrayList te doorlopen .

Herhalingslus

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

while (iterator.hasNext()) {
   System.out.println("Element Value= " + iterator.next());
}
Deze while() -lus gebruikt de .hasNext() Booleaanse methode van de klasse Iterator om te controleren of er een toekomstig element is. Als de voorwaarde waar is, gaat het verder. Als het terugkeert als false, eindigt de lus. Het belangrijkste hier is dat de methoden .hasNext() en .next() beide een eerste controle van het eerste element uitvoeren. Als de Collection leeg is en er geen eerste element is, retourneert de methode false voor de .hasNext() en genereert een NoSuchElementException voor de .next() methode.

For loop

for (Iterator<String> iterator = example.iterator(); iterator.hasNext();) {
  System.out.println("Element Value= " + iterator.next());
}
Dit lijkt op een meer traditionele for-lus. Het gebruikt de methode .hasNext() als het gedeelte voor het controleren en wijzigen van de voorwaarden. De initialisatie is de aanroep naar de Iterator.

Voor: elke lus

for (String s : example) {
  System.out.println("Element Value= " + s);
}
De For:Elke lus is een for-lus, maar als je niet weet hoe je het moet lezen, kan het een beetje verwarrend zijn. De syntaxis van een For:Elke lus is for (data_type variableName : collectionName){ body} . Deze for:elke lus heeft een aantal nadelen. Ten eerste kan het de collectie slechts in één richting doorkruisen. Ten tweede moet je elk element herhalen. Je kunt ze niet overslaan. Maar als handige lijst-iterator in Java is dit de beste optie. Aan de positieve kant is de for:elke lus heel gemakkelijk te lezen en als je hem eenmaal kent, is het moeilijk om fout te gaan. Als je je afvraagt ​​wat de uitvoer van de drie iteratorlussen is, ze zijn allemaal hetzelfde:
Element Value= Item 1
Element Value= Item 2
Element Value= Item 3
Element Value= Item 4

Een iterator gebruiken in Java voor kaarten

Kaarten zijn een populaire manier om gegevens op te slaan, maar omdat ze Collection niet uitbreiden , kunt u de vorige iterators niet gebruiken om rechtstreeks een kaart te doorlopen. Dus hoe gebruik je een iterator in Java om door Map s en HashMap s te gaan? Er zijn vier goede Java-kaartiteratormethoden. We behandelen ze afzonderlijk. Laten we eerst een kaart laden met een reeks waarden.
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-methode: forEach(action)

example.forEach((k,v) -> System.out.println("Key: "+ k + ", Value: " + v));
Deze methode gebruikt een lambda-expressie om door te lopen. De lambda-operator is de methode forEach() en de body drukt de waarden af. Dit gebruikt een operator met meerdere parameters. Dit is de snelste en schoonste methode voor map iterator in Java 8.

Java Hashmap Iterator-methode: For:Each() Loop

for (Map.Entry<String, String> iterate : example.entrySet()) {
  System.out.println("Key: " + iterate.getKey() + ", Value: " + iterate.getValue());
}
Hierbij wordt de For:Each- syntaxis gebruikt om de methode entrySet() aan te roepen om een ​​set te retourneren die de sleutel en waarde als elementen heeft. Bovendien zijn de objecten bij gebruik van de methode .Entry() alleen waar terwijl deze iteratie plaatsvindt.

Java Hashmap Iterator-methode: 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());
)
Deze methode converteert de kaart opnieuw naar een set om de Collections Iterator en methoden te gebruiken. Voor deze drie iteratormethoden ziet het rendement er als volgt uit:
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);
}
Deze geeft de elementen op een andere manier terug. Het zal eerst alle sleutels in volgorde retourneren en vervolgens alle waarden:
Key: alpha
Key: beta
Key: gamma
Value: one
Value: two
Value: three
Opmerkingen
  • Populair
  • Nieuw
  • Oud
Je moet ingelogd zijn om opmerkingen te kunnen maken
Deze pagina heeft nog geen opmerkingen