L'interface ListIterator est un itérateur de liste qui permet de traverser une liste dans plusieurs directions, de modifierla liste durant l'itération et d'obtenir la position courante de l'itérateur dans la liste.

while(iterateurListe.hasNext()) {
    listeItertateur.next();
}
// ou
while(iterateurListe.hasPrevious()) {
    listeItertateur.previous();
}

Les classes implémentant l'interface ListIterator sont des collections implémentant l'interface List telles que AbstractList, ArrayList, LinkedList et Vector.

Les méthodes
void add(Object o)
insère un élément donné au sein de la liste.
boolean hasNext()
retourne true si l'itérateur de liste ne rencontre plus d'élément durant une itération descendante.
boolean hasPrevious()
retourne true si l'itérateur de liste ne rencontre plus d'élément durant une itération ascendante.
Object next()
retourne le prochain élément de la liste.
int nextIndex()
retourne l'index du prochain élément à retourner.
Object previous()
retourne l'élément précédent de la liste.
int previousIndex()
retourne l'index du précédent élément à retourner.
void remove()
supprime de la collection sous-jacente le dernier élément retourné par l'itérateur de liste.
void set(Object o)
remplace le dernier élément retourné par l'itérateur de liste, par l'élément spécifié.

Un objet ListIterator ne possède aucun élément courant. Sa position de curseur se trouve toujours entre l'élément qui serait retourné lors de l'appel de la méthode previous() et l'élément qui serait retourné par la méthode next().

Une position de curseur égale à zéro, signifie que le curseur de l'itérateur de liste pointe la position située juste avant le premier élément de la liste sous-jacente. Ainsi, Une position égale à 1, indique que le curseur est positionné entre le premier élément et le second.

Exemple [voir]
import java.util.ListIterator;
import java.util.ArrayList;

public class CollectionIterateurDeListe {
    public static void main(String[] args) {
      String[] joursSemaine = {"lundi", "mardi", "mercredi", "jeudi", 
                               "vendredi", "samedi", "dimanche"};
      String[] daysOfWeek = {"sunday", "monday", "tuesday", "wednesday", 
                             "thursday", "friday", "saturday"};

      ArrayList liste = creerTableau(joursSemaine);
      ArrayList liste2 = creerTableau(daysOfWeek);
      ListIterator iterateur = liste.listIterator();
      ListIterator iterateur2 = liste2.listIterator(liste2.size());
      Object element;
      while(iterateur.hasNext()){
        element = iterateur.next();
        iterateur.set(iterateur2.previous());
        System.out.println(iterateur.previousIndex() 
                                              + "\t" + element.toString());
      }
      while(iterateur.hasPrevious()){
        element = iterateur.previous();
        System.out.println(iterateur.nextIndex() 
                                              + "\t" + element.toString());
      }
    }
    public static ArrayList creerTableau(String[] obj){
      ArrayList tableau = new ArrayList();
      for(int i = 0; i < obj.length; i++){
        tableau.add(obj[i]);
      }
      return tableau;
    }
}