example java iterator

iterator java example



java-reset list iterator al primer elemento de la lista (4)

Esta es una solución alternativa, pero se podría argumentar que no agrega suficiente valor para que valga la pena:

import com.google.common.collect.Iterables; ... Iterator<String> iter = Iterables.cycle(list).iterator(); if(iter.hasNext()) { str = iter.next(); }

Llamar hasNext () restablecerá el cursor del iterador al principio si es un final.

Necesito saber cómo "restablecer" el iterador LinkedList a su primer elemento.

Por ejemplo:

LinkedList<String> list;

Iterator iter=list.listIterator;

iter.next();

iter.next();

Una y otra vez y después de muchos movimientos del iterador necesito "reiniciar" la posición del iterador. `

Quiero preguntar cómo puedo "restablecer" mi iterador al primer elemento

Sé que puedo obtener un iterador de lista del primer elemento de esta manera:

iter= list.listIterator(1);

¿Es esta la mejor solución? o tal vez me perdí algo en los documentos de Oracle?


Lo mejor sería no utilizar LinkedList , generalmente es más lento en todas las disciplinas y menos útil. (Cuando principalmente se inserta / elimina al frente, especialmente para grandes arreglos LinkedList es más rápido)

Use ArrayList e itere con

int len = list.size(); for (int i = 0; i < len; i++) { Element ele = list.get(i); }

Restablecer es trivial, solo bucle de nuevo.
Si insiste en usar un iterador, entonces debe usar un nuevo iterador:

iter = list.listIterator();

(Vi una sola vez en mi vida una ventaja de LinkedList: podría recorrer un bucle while y eliminar el primer elemento)


Puede volver a llamar listIterator método listIterator para obtener una instancia del iterador que apunta al principio de la lista:

iter = list.listIterator();


Si el orden no importa, podemos volver a iterar hacia atrás con el mismo iterador utilizando los hasPrevious() y previous() :

ListIterator<T> lit = myList.listIterator(); // create just one iterator

Inicialmente, el iterador se sienta al principio, hacemos la iteración hacia adelante :

while (lit.hasNext()) process(lit.next()); // begin -> end

Luego, el iterador se sienta al final, podemos hacer una iteración hacia atrás :

while (lit.hasPrevious()) process2(lit.previous()); // end -> begin