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