bucles for-each y for
Frecuentes
Visto 413 veces
0
Varias veces me he encontrado con casos en los que el bucle for-each causaba problemas, incluidas excepciones y bloqueos, mientras que el for(it=list.iterator;it.hasNext();)
funcionaria sin problemas. Esto incluye la modificación de la colección (que sé que no debería ocurrir en for-each, pero no sé por qué), así como otros casos en los que clono cosas. No recuerdo ningún ejemplo específico de cajero automático. Acabo de pensar en ello.
¿No es for-each solo un atajo para el segundo tipo de bucle que señalé? ¿Alguien podría explicar exactamente cuál es la diferencia allí?
2 Respuestas
5
El problema es cuando en foreach
bucle usted remove
un elemento. Al usar un iterador, tiene un remove
método. Cuando usas foreach
no tiene acceso directo al iterador subyacente y no puede llamar a su remove
método.
Por lo demás es lo mismo. Foreach no causa más problemas o caídas. Simplemente no puede eliminar un elemento.
contestado el 03 de mayo de 12 a las 15:05
3
for-each
es solo un azúcar sintáctico introducido en Java 1.5. Utiliza iterador obtenido de Iterable
detrás de la escena.
La única diferencia razonable que mencionó es la modificación de la colección durante la iteración. Sí, es imposible. Las colecciones no se pueden modificar durante la iteración usando Iterator
. El intento provoca ConcurrentModificationException
. Esto es relevante para ambos casos (uso explícito e implícito del iterador).
La única excepción es usar Iterator.remove()
(cuando es compatible). En este caso, el iterador no arroja la excepción.
La razón es clara. El iterador no puede iterar la colección que se cambia durante la iteración a menos que conozca el cambio y pueda reorganizarse. Esto es lo que sucede cuando estás usando Iterator.remove()
.
contestado el 03 de mayo de 12 a las 15:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas java loops or haz tu propia pregunta.
stackoverflow.com/questions/7332190/… - Jean Logeart