2010-09-30 8 views
8

Si se configura un iterador para miLista:¿Qué sucede si llamas al mismo repetidor dos veces en la misma colección?

Iterator iter = myList.iterator(); 
while(iter.hasNext()) 
{ 
    MyObj myObj = (MyObj)iter.next(); 
    doPrint(myObj.toString()); 
} 

Y yo lo llamo una segunda vez:

while(iter.hasNext()) 
{ 
    MyObj myObj = (MyObj)iter.next(); 
    doPrint(myObj.toString()); 
} 

¿Va a volver al comienzo de la recolección de la segunda vez que llamo ?

+6

¿Por qué no intentarlo? – Fortega

+0

java.util.ConcurrentModificationException –

Respuesta

8

La interfaz iterador ofrece sólo tres métodos:

  • hasNext()
  • siguiente ()
  • remove()

Así que no hay manera de saber el iterador a "reset", "reiniciar desde el comenzando "o" retrocediendo ". Una vez que se sienta en el último elemento de la secuencia subyacente, ha hecho su trabajo y no hay necesidad de mantener la referencia. Susurra R.I.P y haz que se reúna con Big GC.

31

iter.hasNext() en el segundo ciclo devolverá false inmediatamente, por lo que el código dentro del bucle no se ejecutará.

Si vuelve a crear el iterador, sin embargo (por list.iterator()), la iteración se reiniciará desde el principio.

+0

+1 para mayor claridad sobre el resultado de una segunda llamada a .iterator(). –

3

La segunda parte no se ejecutará, porque el iter.hasNext() devuelve falso ...

Cuestiones relacionadas