Différence entre Iterator et Listiterator?

138
Iterator ite = Set.iterator();
Iterator ite = List.iterator();

ListIterator listite = List.listIterator();

Nous pouvons utiliser Iteratorpour parcourir a Setou a Listou a Map. Mais ListIteratorne peut être utilisé que pour traverser a List, il ne peut pas traverser a Set. Pourquoi?

Je sais que la principale différence est qu'avec l'itérateur, nous pouvons voyager dans une seule direction, mais avec ListIteratornous pouvons voyager dans les deux sens. Y-a-t'il d'autres différences? Et des avantages de ListIteratorplus Iterator?

Siva
la source
en plus de la réponse de Peters, je vous recommande de lire un chapitre sur la réflexion en java sur les itérateurs avec tous les bons exemples là
fourmi

Réponses:

150

Les différences sont répertoriées dans le Javadoc pour ListIterator

Vous pouvez

  • itérer en arrière
  • obtenir l'itérateur à tout moment.
  • ajouter une nouvelle valeur à tout moment.
  • définir une nouvelle valeur à ce stade.
Peter Lawrey
la source
68
Et la raison pour laquelle vous ne pouvez pas faire cela avec a Setest simple: il n'y a pas de "point courant": les éléments n'ont pas d'index et il n'y a pas de moyen utile d'ajouter un élément "avant" ou "après" un autre.
Joachim Sauer
@Peter Lawrey obtient l'index à tout moment - S'agit-il des méthodes previousIndex () et nextIndex () ?
gstackoverflow
2
@gstackoverflow check java.util.List # listIterator (int)
kilonet
4
@kilonet au lieu d' obtenir l'index à tout moment , devrait-il être formulé comme «obtenir l'itérateur à tout moment» pour éviter toute confusion?
Shailesh Pratapwar
39

Il y a deux différences:

  1. Nous pouvons utiliser Iterator pour parcourir l'ensemble et la liste et également le type de carte d'objets. Alors qu'un ListIterator peut être utilisé pour traverser pour les objets de type List, mais pas pour les objets de type Set.

    Autrement dit, nous pouvons obtenir un objet Iterator en utilisant Set et List, voir ici:

    En utilisant Iterator, nous pouvons récupérer les éléments de l'objet Collection uniquement dans le sens direct.

    Méthodes dans Iterator:

    1. hasNext()
    2. next()
    3. remove()
    Iterator iterator = Set.iterator();
    Iterator iterator = List.iterator();
  2. Mais nous obtenons l'objet ListIterator uniquement à partir de l'interface List, voir ici:

    où en tant que ListIterator vous permet de traverser dans les deux sens (avant et arrière). Donc, il a deux méthodes de plus comme hasPrevious()et previous()autres que celles d'Iterator. De plus, nous pouvons obtenir des index des éléments suivants ou précédents (en utilisant nextIndex() etpreviousIndex() respectivement )

    Méthodes dans ListIterator:

    1. hasNext ()
    2. suivant()
    3. précédent()
    4. hasPrevious ()
    5. retirer()
    6. nextIndex ()
    7. previousIndex ()
    ListIterator listiterator = List.listIterator();

    c'est-à-dire que nous ne pouvons pas obtenir l'objet ListIterator à partir de l'interface Set.

Référence: - Quelle est la différence entre Iterator et ListIterator?

jaideep
la source
39
Cela semble être en grande partie copié -collé de kirankumarjava.blogspot.com/2013/06/… . Vous devez toujours reconnaître l'auteur original.
Cameron Skinner
25

Iterator est une super classe de ListIterator.

Voici les différences entre eux:

  1. Avec iteratorvous ne pouvez avancer que vers l'avant, mais avec ListIteratorvous pouvez également déplacer les backword tout en lisant les éléments.
  2. Avec ListIteratorvous pouvez obtenir l'index à tout moment pendant le parcours, ce qui n'est pas possible aveciterator s.
  3. Avec iteratorvous pouvez vérifier uniquement l'élément suivant disponible ou non, mais danslistiterator vous pouvez vérifier les éléments précédents et suivants.
  4. Avec listiteratorvous pouvez ajouter un nouvel élément à tout moment, tout en parcourant. Pas possible aveciterator .
  5. Avec listiteratorvous pouvez modifier un élément pendant le parcours, ce qui n'est pas possible avec iterator.

Aspect et sensation de l'itérateur:

 public interface Iterator<E> {
    boolean hasNext();
    E next();
    void remove(); //optional-->use only once with next(), 
                         dont use it when u use for:each
    }

Apparence et sensation de ListIterator:

public interface ListIterator<E> extends Iterator<E> {
    boolean hasNext();
    E next();
    boolean hasPrevious();
    E previous();
    int nextIndex();
    int previousIndex();
    void remove(); //optional
    void set(E e); //optional
    void add(E e); //optional
}
user1923551
la source