AOWS

Just another adrian’s weblog

Recorriendo colecciones con Iterator

with 6 comments

Desde siempre nos han enseñado a recorrer colecciones mediante un bucle for usando una variable auxiliar como índice. Sin embargo, este enfoque puede resultar muy peligroso al ser origen de muchos errores.

Actualmente hay mejores soluciones para recorrer una colección. Por ejemplo, en Java disponemos de la clase Iterator. Su uso es bastante sencillo:

List lista = new ArrayList();
// ...
for (Iterator iter = lista.iterator(); iter.hasNext(); ) {
	// código aquí
}

También lo podemos usar en un bucle while:

List lista = new ArrayList();
// ...
Iterator iter = lista.iterator();
while (iter.hasNext()) {
	// código aquí
}

Una solución más elegante y menos propensa a errores que la clásica.

Written by adrian

21 enero, 2008 a 17:38

Publicado en Posts

Tagged with ,

6 comentarios

Subscribe to comments with RSS.

  1. La propensidad a errores de esta alternativa (que yo también exploto frecuentemente) es menor; pero sigue siendo fácil meter la pata y más aún cuando se usa Java sin generics (pre 5.0). Por ejemplo tenemos la manía de llamarles iterator o iter y como anides dos o tres el susto está asegurado, sobre todo si lo que va dentro es del mismo tipo y no da error de ejecución sino errores en la lógica.

    La solución viene de la mano de Java 5.0 con su foreach (for (Elemento elemento : lista) { ... }) que resuelve la iteración y la selección del elemento actual en la signatura de la propia instrucción.

    sergio

    21 enero, 2008 at 23:21

  2. Efectivamente, tampoco con esta aproximación estamos libres de fallos, por desgracia. Yo de todos modos por el momento sigo con el clásico for (int i=0; ..., no consigo acostumbrarme a los iteradores.

    En PHP utilizo bastante el foreach, lo malo de usarlo en Java es que no siempre se dispone de la 1.5.

    adrian

    23 enero, 2008 at 16:53

  3. […] recorrido se hace con iteradores tal y como vimos hace unos días. Lo podíamos haber hecho con índices escogiendo la primera opción o incluso, si queremos algo […]

  4. Que tal, estoy utilizando la clase Iterator de la misma forma que el primer ejemplo, la lista que ocupo contiene 2 elementos sin embargo sigue ejecutándose el proceso aún cuando ya recorrió todos los elementos de la lista por lo que obtengo una excepción. ¿No saben que podría estar pasando?

    Eduardo

    3 abril, 2011 at 15:09

  5. Hay objetos que no permiten el uso de foreach, por ejemplo TIntObjectIterator, que solo permite ser recorrido con iterator(), asi que esta tambien hay que aprendersela ^^

    kimeraweb

    12 febrero, 2012 at 18:21

  6. SI nuestro deseo es ser programadores de excelencia, debemos aprender a manejar todas las herramientas y aplicar la mas conveniente en el momento justo.

    Carlos R.

    8 junio, 2012 at 12:12


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: