Java - Comment utiliser Iterator?

Souvent, vous souhaiterez parcourir les éléments d'une collection. Par exemple, vous souhaiterez peut-être afficher chaque élément. La façon la plus simple de procéder consiste à utiliser un itérateur, qui est un objet qui implémente l'interface Iterator ou ListIterator.

Iterator vous permet de parcourir une collection, d'obtenir ou de supprimer des éléments. ListIterator étend Iterator pour permettre la traversée bidirectionnelle d'une liste et la modification d'éléments.

Avant de pouvoir accéder à une collection via un itérateur, vous devez en obtenir un. Chacune des classes de collection fournit une méthode iterator () qui renvoie un itérateur au début de la collection. En utilisant cet objet itérateur, vous pouvez accéder à chaque élément de la collection, un élément à la fois.

En général, pour utiliser un itérateur pour parcourir le contenu d'une collection, procédez comme suit:

  • Obtenez un itérateur au début de la collection en appelant la méthode iterator () de la collection.

  • Configurez une boucle qui appelle hasNext (). Faites itérer la boucle tant que hasNext () renvoie true.

  • Dans la boucle, obtenez chaque élément en appelant next ().

Pour les collections qui implémentent List, vous pouvez également obtenir un itérateur en appelant ListIterator.

Les méthodes déclarées par Iterator

N ° Sr. Méthode et description
1

boolean hasNext( )

Renvoie true s'il y a plus d'éléments. Sinon, renvoie false.

2

Object next( )

Renvoie l'élément suivant. Lève NoSuchElementException s'il n'y a pas d'élément suivant.

3

void remove( )

Supprime l'élément actuel. Lève IllegalStateException si une tentative d'appel à remove () n'est pas précédée d'un appel à next ().

Les méthodes déclarées par ListIterator

N ° Sr. Méthode et description
1

void add(Object obj)

Insère obj dans la liste devant l'élément qui sera retourné par le prochain appel à next ().

2

boolean hasNext( )

Renvoie true s'il y a un élément suivant. Sinon, renvoie false.

3

boolean hasPrevious( )

Renvoie true s'il existe un élément précédent. Sinon, renvoie false.

4

Object next( )

Renvoie l'élément suivant. Une NoSuchElementException est levée s'il n'y a pas d'élément suivant.

5

int nextIndex( )

Renvoie l'index de l'élément suivant. S'il n'y a pas d'élément suivant, renvoie la taille de la liste.

6

Object previous( )

Renvoie l'élément précédent. Une NoSuchElementException est levée s'il n'y a pas d'élément précédent.

sept

int previousIndex( )

Renvoie l'index de l'élément précédent. S'il n'y a pas d'élément précédent, renvoie -1.

8

void remove( )

Supprime l'élément actuel de la liste. Une IllegalStateException est levée si remove () est appelée avant que next () ou previous () ne soit appelé.

9

void set(Object obj)

Assigne obj à l'élément courant. Il s'agit du dernier élément renvoyé par un appel à next () ou previous ().

Exemple

Voici un exemple illustrant à la fois Iterator et ListIterator. Il utilise un objet ArrayList, mais les principes généraux s'appliquent à tout type de collection.

Bien entendu, ListIterator n'est disponible que pour les collections qui implémentent l'interface List.

import java.util.*;
public class IteratorDemo {

   public static void main(String args[]) {
      // Create an array list
      ArrayList al = new ArrayList();
      
      // add elements to the array list
      al.add("C");
      al.add("A");
      al.add("E");
      al.add("B");
      al.add("D");
      al.add("F");

      // Use iterator to display contents of al
      System.out.print("Original contents of al: ");
      Iterator itr = al.iterator();
      
      while(itr.hasNext()) {
         Object element = itr.next();
         System.out.print(element + " ");
      }
      System.out.println();
      
      // Modify objects being iterated
      ListIterator litr = al.listIterator();
      
      while(litr.hasNext()) {
         Object element = litr.next();
         litr.set(element + "+");
      }
      System.out.print("Modified contents of al: ");
      itr = al.iterator();
      
      while(itr.hasNext()) {
         Object element = itr.next();
         System.out.print(element + " ");
      }
      System.out.println();

      // Now, display the list backwards
      System.out.print("Modified list backwards: ");
      
      while(litr.hasPrevious()) {
         Object element = litr.previous();
         System.out.print(element + " ");
      }
      System.out.println();
   }
}

Cela produira le résultat suivant -

Production

Original contents of al: C A E B D F
Modified contents of al: C+ A+ E+ B+ D+ F+
Modified list backwards: F+ D+ B+ E+ A+ C+