Iterador en Java

Iterador en Java

Un iterador en Java és un dels més utilitzats cursors al Java Collections Framework . S'utilitza per recórrer o iterar per elements d'una col·lecció un a un.

  • S'utilitza per travessar elements només en direcció cap endavant.
  • Elimina elements de manera segura durant el recorregut mitjançant remove().
  • L'iterador és un cursor universal que s'aplica a tots els tipus de col·lecció: conjunt de llista i cua.

Declaració d'iterador

Iterador d'interfície pública

Aquí E representa el tipus d'elements que s'han d'iterar.

Creació d'objectes d'iterador

Un objecte Iterator es crea cridant al mètode iterator() en un objecte de col·lecció. Aquí utilitzarem un iterador per recórrer i imprimir cada element d'un ArrayList .

Col·lecció noms = new ArrayList <>();
Iterador itr = noms.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  );         }      }   }   

Sortida
A B C  

Jerarquia de l'iterador

Iterator forma part de paquet java.util i és implementat per totes les classes de col·lecció mitjançant les seves subinterfícies.

listeterator_extends_iterator_Iterador-cursor

Mètodes de la interfície iteradora

La interfície de l'iterador defineix tres mètodes que s'indiquen a continuació:

  • hasNext(): Retorna true si la iteració té més elements.
  • següent(): Retorna el següent element de la iteració. Es tira NoSuchElementException si no hi ha més element present.
  • eliminar(): Elimina l'últim element retornat per next(). Aquest mètode només es pot cridar una vegada per trucada a next().

Nota El mètode : remove() pot llançar dues excepcions és a dir, de la següent manera:

Treball intern

En aquesta secció intentarem entendre com funcionen internament Java Iterator i els seus mètodes. Prenem el següent objecte LinkedList per entendre aquesta funcionalitat.

Pas 1: Ara creem un objecte Iterator a l'objecte Llista tal com es mostra a continuació:

Iterador citiesIterator = cities.iterator();

L'iterador "citiesIteartor" es veurà com a continuació:

Iterador de Java Pas 1Pas-1

Aquí el cursor de l'iterador apunta abans del primer element de la llista.

Pas 2: Ara executarem el següent fragment de codi.

citiesIterator.hasNext();
citiesIterator.next();

Java Iterator Pas 2Pas-2

Quan executem el fragment de codi anterior, el cursor d'Iterator apunta al primer element de la llista, tal com es mostra al diagrama anterior.

Pas 3: Ara executarem el següent fragment de codi.

citiesIterator.hasNext();
citiesIterator.next();

Java Iterator Pas 3Pas-3


Quan executem el fragment de codi anterior, el cursor d'Iterator apunta al segon element de la llista, tal com es mostra al diagrama anterior.

Pas 4: Feu aquest procés per arribar al cursor de l'iterador fins a l'element final de la llista.

Pas de lPas-4

Pas 5: Després de llegir l'element final, si executem el fragment de codi següent, retorna un valor fals.

citiesIterator.hasNext();

Iterador de Java al final

A mesura que el cursor de l'iterador apunta cap a després de l'element final de la llista hasNext() El mètode retorna un valor fals.

Nota: Java Iterator només admet la iteració de direcció cap endavant, per la qual cosa es coneix com a cursor unidireccional. En canvi, ListIterator és bidireccional que permet el recorregut en ambdues direccions.

Java-Ilterator-6Iterador de Java: direcció cap endavant

Exemple: Aquí utilitzarem un Iterator per recórrer i eliminar elements estranys d'una ArrayList.

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  );      }   }   

Sortida
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]  

Explicació: A l'exemple anterior, creem una ArrayList d'enters i després la iterarem mitjançant un Iterator i eliminem tots els nombres senars. Imprimeix la llista abans i després d'eliminar els elements senars i imprimeix la llista modificada només amb nombres parells.