¿Diferencia entre Iterator y Listiterator?

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

ListIterator listite = List.listIterator();

Podemos usar Iteratorpara atravesar a Seto a Listo a Map. Pero ListIteratorsolo puede usarse para atravesar a List, no puede atravesar a Set. ¿Por qué?

Sé que la principal diferencia es que con el iterador podemos viajar en una sola dirección pero con ListIteratorambas podemos viajar. ¿Hay otras diferencias? ¿Y alguna ventaja de ListIteratormás Iterator?

Siva
fuente
Además de la respuesta Peters le recomiendo que lea un capítulo en el pensamiento en java sobre iteradores con todos buenos ejemplos no
hormiga

Respuestas:

150

Las diferencias se enumeran en el Javadoc para ListIterator

Usted puede

  • iterar hacia atrás
  • obtener el iterador en cualquier punto.
  • agregue un nuevo valor en cualquier momento.
  • establecer un nuevo valor en ese punto.
Peter Lawrey
fuente
68
Y la razón por la que no puede hacer eso con un Setes simple: no hay un "punto actual": los elementos no tienen índice y no hay una forma útil de agregar un elemento "antes" o "después" de otro.
Joachim Sauer
@Peter Lawrey obtiene el índice en cualquier momento . ¿Se trata de los métodos previousIndex () y nextIndex () ?
gstackoverflow
2
@gstackoverflow check java.util.List # listIterator (int)
kilonet
44
@kilonet en lugar de obtener el índice en cualquier punto , ¿debería expresarse como "obtener el iterador en cualquier punto" para evitar confusiones?
Shailesh Pratapwar
39

Hay dos diferencias:

  1. Podemos usar Iterator para atravesar Set y List y también Map type of Objects. Mientras que un ListIterator se puede usar para recorrer objetos de tipo Lista, pero no para Objetos de tipo Conjunto.

    Es decir, podemos obtener un objeto Iterator usando Set y List, vea aquí:

    Al usar Iterator podemos recuperar los elementos del objeto de colección solo en dirección hacia adelante.

    Métodos en Iterator:

    1. hasNext()
    2. next()
    3. remove()
    Iterator iterator = Set.iterator();
    Iterator iterator = List.iterator();
  2. Pero obtenemos el objeto ListIterator solo de la interfaz List, vea aquí:

    donde como ListIterator le permite atravesar en cualquier dirección (hacia adelante y hacia atrás). Entonces tiene dos métodos más como hasPrevious()y previous()diferentes a los de Iterator. Además, podemos obtener índices de los elementos siguientes o anteriores (usando nextIndex() y previousIndex()respectivamente)

    Métodos en ListIterator:

    1. hasNext ()
    2. siguiente()
    3. anterior()
    4. hasPrevious ()
    5. eliminar()
    6. nextIndex ()
    7. previousIndex ()
    ListIterator listiterator = List.listIterator();

    es decir, no podemos obtener el objeto ListIterator de la interfaz Set.

Referencia: - ¿Cuál es la diferencia entre Iterator y ListIterator?

jaideep
fuente
39
Parece que está en gran parte cortado y pegado de kirankumarjava.blogspot.com/2013/06/… . Siempre debe reconocer al autor original.
Cameron Skinner
25

Iterator es una superclase de ListIterator.

Aquí están las diferencias entre ellos:

  1. Con iteratorusted puede avanzar solo, pero con ListIteratorusted puede retroceder también mientras lee los elementos.
  2. Con ListIteratorusted puede obtener el índice en cualquier momento durante el desplazamiento, lo que no es posible con iterators.
  3. Con iteratorpuede verificar solo el siguiente elemento disponible o no, pero en listiteratorpuede verificar los elementos anteriores y siguientes.
  4. Con listiteratorusted puede agregar un nuevo elemento en cualquier momento, mientras recorre. No es posible con iterator.
  5. Con listiteratorusted puede modificar un elemento mientras recorre, lo que no es posible con iterator.

Aspecto y sensación de iterador:

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

Aspecto 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
}
usuario1923551
fuente