web-dev-qa-db-fra.com

Différence entre Iterator et Listiterator?

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

ListIterator listite = List.listIterator();

Nous pouvons utiliser Iterator pour parcourir un Set ou un List ou un Map. Mais ListIterator ne peut être utilisé que pour parcourir un List, il ne peut pas traverser un Set. Pourquoi?

Je sais que la principale différence est qu'avec itérateur nous pouvons voyager dans une seule direction mais avec ListIterator nous pouvons parcourir les deux directions. Y-a-t'il d'autres différences? Et tous les avantages de ListIterator par rapport à Iterator?

130
jassu

Les différences sont listées dans la Javadoc pour ListIterator

Vous pouvez

  • itérer à l'envers
  • obtenir l'itérateur à tout moment.
  • ajouter une nouvelle valeur à tout moment.
  • définir une nouvelle valeur à ce point.
145
Peter Lawrey

Il y a deux différences:

  1. Nous pouvons utiliser Iterator pour parcourir Set et List, ainsi que le type d’objet Map. Alors qu'un ListIterator peut être utilisé pour parcourir des objets de type liste, mais pas pour des objets de type set.

    C'est-à-dire que 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 Collection Object en avant uniquement.

    Méthodes en itérateur:

    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 parcourir dans les deux sens (en avant et en arrière). Donc, il a deux méthodes supplémentaires 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 respectivement nextIndex() et previousIndex())

    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?

39
jaideep

Iterator est la classe supérieure de ListIterator.

Voici les différences entre eux:

  1. Avec iterator, vous ne pouvez avancer que de l'avant, mais avec ListIterator, vous pouvez également déplacer l'arrière-plan pendant la lecture des éléments.
  2. Avec ListIterator, vous pouvez obtenir l'index en tout point du parcours, ce qui n'est pas possible avec iterators.
  3. Avec iterator, vous pouvez uniquement vérifier le prochain élément disponible ou non, mais dans listiterator, vous pouvez vérifier les éléments précédents et suivants.
  4. Avec listiterator, vous pouvez ajouter un nouvel élément à tout moment du parcours. Pas possible avec iterator.
  5. Avec listiterator, vous pouvez modifier un élément en traversant, ce qui n’est pas possible avec iterator.

Iterator ressemble et se sent:

 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 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
}
25
user1923551

Les avantages de ListIterator par rapport à Iterator est ce que nous pouvons ajouter un élément à tout moment en traversant une liste à l'aide de ListIterator.

2
Alice