Inicio > Java > Java Recorrer Colecciones [ Collection ] usando for/while Parte 1

Java Recorrer Colecciones [ Collection ] usando for/while Parte 1

Bueno aquí pondré algunas formas de recorrer Colecciones, Primero partiré por Las clases que Implementan Collection, son las mas fáciles de recorrer.

Para recorrer ArrayList,Vector,HashSet,TreeSet y todos los List y Set podemos usar lo siguiente:

Primero Crearé una clase y un metodo main que tendrá un ArrayList para poder recorrerlo y mostrar por pantalla lo que tiene dicho ArrayList

/**
 * @(#)Persona.java
 *
 *
 * @author Esteban Fuentealba
 * @version 1.00 2009/11/29
 */

import java.util.ArrayList;
public class Persona {
	private String rut;
	private String nombre;

	public Persona() {}
    public Persona(String rut,String nombre) {
    	this.rut 	= rut;
    	this.nombre = nombre;
    }

    public String getRut() {
    	return this.rut;
    }
    public String getNombre() {
    	return this.nombre;
    }

    public static void main(String[] args) {
    	ArrayList<Persona> lista = new ArrayList<Persona>();
    	lista.add(new Persona("111-1","Juan"));
    	lista.add(new Persona("222-2","Pedro"));
    	lista.add(new Persona("333-3","Luis"));

    }

}

Bien , es un ArrayList Genérico de Persona. Ahora veamos la primera forma de recorrer, es parecida cuando recorremos arrays

Simple For:

for(int i=0; i< lista.size(); i++) {
    		System.out.println(lista.get(i));
    	}

Es un for , le damos un contador de donde empezará (Desde la posición 0 de la lista), la condición (que se mantenga el ciclo siempre que nuestro contador sea menor al largo de la lista) y que debe hacer cuando cumpla un ciclo (aumentar el contador para ir a la siguiente posición).
Esto nos debe mostrar por pantalla lo siguiente:

Persona@3e25a5
Persona@19821f
Persona@addbf1

¿ Por que ? Yo quería que mostrara los datos de la persona =(
Mostró eso porque el programa recorre el arraylist, saca un objeto de la posición que este recorriendo, he imprime el objeto, el objeto es de la Clase Persona por lo que el programa va a ir a esa clase y buscará si esta el método toString() y como no lo encuentra imprimirá el toString() del padre, en este caso el de Object (Todo hereda de Object) que me devuelve El nombre de la Clase “Persona” @ “hashCode”.
Para solucionar esto le pondré el método (sobrescrito) toString() a la clase Persona, quedará así:

/**
 * @(#)Persona.java
 *
 *
 * @author
 * @version 1.00 2009/11/29
 */

import java.util.ArrayList;
public class Persona {
	private String rut;
	private String nombre;

	public Persona() {}
    public Persona(String rut,String nombre) {
    	this.rut 	= rut;
    	this.nombre = nombre;
    }

    public String getRut() {
    	return this.rut;
    }
    public String getNombre() {
    	return this.nombre;
    }

    public String toString() {
    	return "[Rut: "+this.getRut()+"] [Nombre: "+this.getNombre()+"]";
    }
    public static void main(String[] args) {
    	ArrayList<Persona> lista = new ArrayList<Persona>();
    	lista.add(new Persona("111-1","Juan"));
    	lista.add(new Persona("222-2","Pedro"));
    	lista.add(new Persona("333-3","Luis"));

    	for(int i=0; i< lista.size(); i++) {
    		System.out.println(lista.get(i));
    	}
    }
}

Compilo y corro el programa, la salida muestra por pantalla lo siguiente:

[Rut: 111-1] [Nombre: Juan]
[Rut: 222-2] [Nombre: Pedro]
[Rut: 333-3] [Nombre: Luis]

Bien Ahora si mostró lo que queríamos que mostrara.

Iterator:

Otra forma de recorrer el arraylist es usando el metodo iterator() del ArrayList , para entender de mejor forma como funciona iterator() dejo la siguiente imagen:

Lo que esta en verde es nuestra lista. Ojo Iterator no tiene índice, pero la mejor forma de entenderlo es imaginandose el indice, es por eso que puse en la imagen.
Lo que hace iterator() es:

  1. Poner el iterador al principio de la lista. (Imaginariamente en la posición -1, fuera de la lista)
  2. Luego con el metodo hasNext() pregunta si hay un elemento siguiente.
  3. Si hay un elemento debo sacarlo con el metodo next() y vuelvo a preguntar con el hashNext(), así hasta que no exista ningún elemento siguiente.

Lo anterior llevado a código quedaría de la siguiente forma:

Iterator it = lista.iterator();
    	while(it.hasNext()) {
    		System.out.println(it.next());
    	}

la salida por pantalla es la siguiente:

[Rut: 111-1] [Nombre: Juan]
[Rut: 222-2] [Nombre: Pedro]
[Rut: 333-3] [Nombre: Luis]

Cumple la misma función que la primera forma de recorrer.

 

Foreach:

La siguiente forma de recorrer es con foreach, desde Java 5 que se incluyó el bucle foreach para iterar sobre colecciones de objetos.
La forma de ocuparlo es la siguiente

for(Clase nombre : lista) {
	//...
}

Donde “lista” es la collection a recorrer,”Clase” es de que clase es la “lista” y “nombre” es un nombre de variable.
Acá llevado al ejemplo de Persona:

for(Persona p : lista) {
    		System.out.println(p);
    	}

La salida por pantalla es:

[Rut: 111-1] [Nombre: Juan]
[Rut: 222-2] [Nombre: Pedro]
[Rut: 333-3] [Nombre: Luis]

Según yo ,foreach, es la forma mas fácil de recorrer colecciones.

 

Bueno ahí puse tres formas de recorrer una Collection (Set,List,Queue)

Espero que les sirva, en el siguiente post pondré como recorrer Map
Acá les dejo el código con las tres formas,

/**
 * @(#)Persona.java
 *
 *
 * @author
 * @version 1.00 2009/11/29
 */

import java.util.ArrayList;
import java.util.Iterator;
public class Persona {
	private String rut;
	private String nombre;

	public Persona() {}
    public Persona(String rut,String nombre) {
    	this.rut 	= rut;
    	this.nombre = nombre;
    }

    public String getRut() {
    	return this.rut;
    }
    public String getNombre() {
    	return this.nombre;
    }

    public String toString() {
    	return "[Rut: "+this.getRut()+"] [Nombre: "+this.getNombre()+"]";
    }
    public static void main(String[] args) {
    	ArrayList<Persona> lista = new ArrayList<Persona>();
    	lista.add(new Persona("111-1","Juan"));
    	lista.add(new Persona("222-2","Pedro"));
    	lista.add(new Persona("333-3","Luis"));

    	System.out.println("Recorrer Collection con simple for:");
    	for(int i=0; i< lista.size(); i++) {
    		System.out.println(lista.get(i));
    	}
    	System.out.println("Recorrer Collection con Iterator:");
    	Iterator it = lista.iterator();
    	while(it.hasNext()) {
    		System.out.println(it.next());
    	}
    	System.out.println("Recorrer Collection con foreach:");
    	for(Persona p : lista) {
    		System.out.println(p);
    	}
    }
}

Saludos!

Categorías:Java Etiquetas: , , , , , , , ,
  1. febrero 16, 2011 a las 1:59 pm

    por que no vas y chingas a tu putisima madre…..
    en ves de estar preguntando idioteces.

    pinche pedazo de pendejo mejor ponte a estudiar.

    • pelano
      diciembre 14, 2011 a las 10:47 am

      Vete a la mierda imbècil!!!!!

  2. angela
    noviembre 11, 2011 a las 4:46 pm

    muy bueno el ejemplo muchas gracias

  3. Sinestesia
    julio 12, 2012 a las 5:04 am

    no me anda ni el for each ni el iterator… por que puede ser?

  4. ravelli
    septiembre 10, 2012 a las 3:29 pm

    no te da es porque no has importado la libreria import java.util.Iterator;

  5. JavaLoco
    octubre 1, 2012 a las 6:49 pm

    Mu buen ejemplo, te mereces un aplauzo por el esfuerzo, gracias!!!

  6. octubre 5, 2012 a las 12:30 pm

    Me ha sacado un bloqueo de dos días. Muchas gracias.

  7. mayo 23, 2013 a las 12:00 pm

    Gracias me rompi la cabeza buscando por que no me presentaba los datos y en ningun lado te explica que debes poner una clase toString():
    public String toString() {
    return “[Rut: “+this.getRut()+”] [Nombre: “+this.getNombre()+”]”;
    }

    Gracias gracias

  8. junio 30, 2013 a las 5:29 pm

    WOW gracias es la primera página que me aclara muchas dudas :) !

  1. noviembre 29, 2009 a las 10:29 pm

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: