logo

Iterator in Java

Een Iterator in Java is een van de meest gebruikte cursors in het Java Collections Framework . Het wordt gebruikt om elementen van een verzameling één voor één te doorkruisen of te herhalen.

  • Het wordt alleen gebruikt om elementen in voorwaartse richting te doorkruisen.
  • Verwijdert elementen veilig tijdens het doorlopen met behulp van remove().
  • Iterator is een universele cursor die van toepassing is op alle verzamelingstypen: Lijstset en Wachtrij.

Verklaring van Iterator

openbare interface Iterator

Hier vertegenwoordigt E het type elementen waarover moet worden herhaald.



Objectcreatie van Iterator

Een Iterator-object wordt gemaakt door de methode iterator() aan te roepen op een verzamelingsobject. Hier zullen we een Iterator gebruiken om elk element in een bestand te doorlopen en af ​​te drukken ArrayLijst .

Verzamelingnamen = nieuwe ArrayList<>();
Iteratoritr = namen.iterator();

itererende kaart-Java
Java
import java.util.ArrayList; import java.util.Iterator; public class Geeks {  public static void main(String[] args) {    // Create an ArrayList and add some elements  ArrayList<String> al = new ArrayList<>();  al.add('A');  al.add('B');  al.add('C');  // Obtain an iterator for the ArrayList  Iterator<String> it = al.iterator();  // Iterate through the elements and print each one  while (it.hasNext()) {    // Get the next element  String n = it.next();   System.out.println(n);   }  } } 

Uitvoer
A B C 

Hiërarchie van Iterator

Iterator maakt deel uit van het java.util-pakket en wordt door alle verzamelklassen geïmplementeerd via hun subinterfaces.

listiterator_extends_iterator_' title=Iterator-cursor

Methoden van de iteratorinterface

De iteratorinterface definieert drie methoden, zoals hieronder vermeld:

  • heeftVolgende(): Retourneert waar als de iteratie meer elementen bevat.
  • volgende(): Retourneert het volgende element in de iteratie. Het gooit NoSuchElementException als er geen element meer aanwezig is.
  • verwijderen(): Verwijdert het laatste element dat door next() wordt geretourneerd. Deze methode kan slechts één keer per aanroep van next() worden aangeroepen.

Opmerking : remove() methode kan twee uitzonderingen genereren, namelijk als volgt:

Intern werken

In deze sectie zullen we proberen te begrijpen hoe Java Iterator en zijn methoden intern werken. Laten we het volgende LinkedList-object nemen om deze functionaliteit te begrijpen.

Stap 1: Laten we nu een Iterator-object maken op het List-object, zoals hieronder weergegeven:

IteratorstedenIterator = steden.iterator();

De 'citiesIteartor'-iterator ziet er als volgt uit:

Java-iterator Stap 1' loading='lazy' title=Stap-1

Hier wijst de cursor van Iterator naar het eerste element van de lijst.

Stap 2: Nu zullen we het volgende codefragment uitvoeren.

stedenIterator.hasNext();
stedenIterator.next();

Java-iterator Stap 2' loading='lazy' title=Stap 2

Wanneer we het bovenstaande codefragment uitvoeren, wijst de cursor van Iterator naar het eerste element in de lijst, zoals weergegeven in het bovenstaande diagram.

polymorfisme in Java

Stap 3: Nu zullen we het volgende codefragment uitvoeren.

stedenIterator.hasNext();
stedenIterator.next();

Java-iterator Stap 3' loading='lazy' title=Stap-3


Wanneer we het bovenstaande codefragment uitvoeren, wijst de cursor van Iterator naar het tweede element in de lijst, zoals weergegeven in het bovenstaande diagram.

Stap 4: Voer dit proces uit om de cursor van de Iterator naar het eindelement van de lijst te brengen.

conversie van datum naar tekenreeks
Java-iterator Stap n' loading='lazy' title=Stap 4

Stap 5: Als we na het lezen van het laatste element het onderstaande codefragment uitvoeren, retourneert het een valse waarde.

stedenIterator.hasNext();

Java Iterator aan het einde' loading='lazy' title=

Terwijl de cursor van Iterator naar het laatste element van de lijst wijst heeftVolgende() methode retourneert een valse waarde.

Opmerking: Java Iterator ondersteunt alleen iteratie in voorwaartse richting, dus het staat bekend als een unidirectionele cursor. ListIterator is daarentegen bidirectioneel, waardoor verplaatsing in beide richtingen mogelijk is.

Java-Ilterator-6' loading='lazy' title=Java-iterator: voorwaartse richting

Voorbeeld: Hier zullen we een Iterator gebruiken om oneven elementen uit een ArrayList te doorlopen en te verwijderen.

Java
import java.util.ArrayList; import java.util.Iterator; public class Geeks {  public static void main(String[] args) {    // Creating an ArrayList of Integer type  ArrayList<Integer> al = new ArrayList<>();  // Adding elements to the ArrayList  for (int i = 0; i < 10; i++) {  al.add(i);  }  // Printing the original list  System.out.println('Original List: ' + al);  // Creating an Iterator for the ArrayList  Iterator<Integer> itr = al.iterator();  // Iterating through the list and removing odd elements  while (itr.hasNext()) {    // Getting the next element  int i = itr.next();     System.out.print(i + ' ');   // Removing odd elements  if (i % 2 != 0) {  itr.remove();  }  }  System.out.println();  // Printing the modified list after removal of odd elements  System.out.println('Modified List: ' + al);  } } 

Uitvoer
Original List: [0 1 2 3 4 5 6 7 8 9] 0 1 2 3 4 5 6 7 8 9 Modified List: [0 2 4 6 8] 

Uitleg: In het bovenstaande voorbeeld maken we een ArrayList met gehele getallen, doorlopen deze vervolgens met behulp van een Iterator en verwijderen alle oneven getallen. Het drukt de lijst af voor en na het verwijderen van de oneven elementen en drukt de gewijzigde lijst af met alleen even getallen.