Iterator in Java

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 .

Verzameling namen = nieuwe ArrayList <>();
Iterator itr = namen.iterator();

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_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:

Iterator stedenIterator = steden.iterator();

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

Java-iterator Stap 1Stap-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 2Stap 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.

Stap 3: Nu zullen we het volgende codefragment uitvoeren.

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

Java-iterator Stap 3Stap-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.

Java-iterator Stap nStap 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

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-6Java-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.