L'interface Collection permet d'ajouter ou de supprimer un élément à une collection, mais ne donne pas de moyen pour énumérer ses éléments. C'est possible si la collection est une liste l, puisque ses éléments sont indexés par des entiers : il suffit d'invoquer l.get(0), l.get(1), etc. Ce n'est pas possible si la collection est un ensemble. Dans le cas général d'une collection, on peut obtenir une énumération de ses éléments en faisant appel à un itérateur.
Une instance de java.util.Iterator permet de parcourir une structure de données en gardant en mémoire un curseur, qui désigne non un élément, mais une position avant, ou après un élément. Au début du parcours, le curseur est avant le premier élément, et à la fin du parcours, il est après le dernier élément (figure 6.3).
L'interface Iterator déclare les méthodes suivantes :
Un itérateur permet de mettre en 3#3uvre un pattern d'itération généralisant à certaines structures de données le parcours itératif d'un intervalle d'entiers for (i=0; i<n; i++). Ce pattern s'utilise typiquement dans une boucle, ici pour imprimer chacun des éléments succesivement retournés par next :
Iterator i = ...; while (i.hasNext()) { System.out.println(i.next()); }
On notera que next retourne un Object. Souvent, on sait que les objets retournés sont en fait d'une certaine classe A ; afin de pouvoir accéder aux champs et aux méthodes de cette classe, on doit réaliser un transtypage de Object vers A :
while (i.hasNext()) { A a = (A) i.next(); // ... accès aux membres de a }