Inicio > Java > Java Recorrer Colecciones [ Map ] usando for/while Parte 2

Java Recorrer Colecciones [ Map ] usando for/while Parte 2

En el Post Anterior Mostre tres formas de recorrer una Collection ahora dejo como recorrer un Map.

En si un Map tiene una Clave y un Valor, por eso es un poco mas complicado recorrerlo

Iterator

Primero Mostrare como recorrer con Iterator

Iterator it = mapList.entrySet().iterator();
    	while(it.hasNext()) {
    		Map.Entry ent = (Map.Entry)it.next();
    		Persona p = (Persona)ent.getValue();
    		System.out.println(p);
    	}

Lo diferente esta en el Map.Entry , esto me permitirá acceder a la key y al value. (Recordemos que el value es el objeto completo).

Simple For

En si, Map no tiene un indice numérico por defecto, como si lo tienen los List, es por eso que para recorrer un Map usando for NO se podrá decir “quiero el objeto en la posición x” pero hay una forma de poder hacerlo, esta forma es convertir el map en array (arreglo) , Esto lo muestro a continuación

for(int i=0; i<mapList.size(); i++) {
    System.out.println(mapList.values().toArray()[i]);
}

Del Map tome todos los valores con el metodo values() esto em devuelve un Set, como no tiene un indice lo convierto a Array y de ese array saco el objeto en la posición “i”

 

Foreach

:

Por ultimo dejo el foreach

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

La forma mas sencilla de recorrer un Map…

Acá les dejo el codigo con las tres formas de Recorrer

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

import java.util.*;

public class Persona {
	private String rut;
	private String nombre;

	public Persona() {}
    public Persona(String rut,String nombre) {
    	this.rut 	= rut;
    	this.nombre = nombre;
    }
    public void setRut(String val) {
    	this.rut = val;
    }
    public void setNombre(String val) {
    	this.nombre = val;
    }
    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) {

    	Map<String,Persona> mapList = new HashMap<String,Persona>();
    		Persona pA = new Persona("111-1","Juan");
    		Persona pB = new Persona("222-2","Pedro");
    		Persona pC = new Persona("333-3","Luis");
    	mapList.put(pA.getRut(),pA);
    	mapList.put(pB.getRut(),pB);
    	mapList.put(pC.getRut(),pC);

    	System.out.println("Recorrer Map con Iterator:");
    	Iterator it = mapList.entrySet().iterator();
    	while(it.hasNext()) {
    		Map.Entry ent = (Map.Entry)it.next();
    		Persona p = (Persona)ent.getValue();
    		System.out.println(p);
    	}
    	System.out.println("Recorrer Map con simple for:");
    	for(int i=0; i<mapList.size(); i++) {
    		System.out.println(mapList.values().toArray()[i]);
    	}

    	System.out.println("Recorrer Map con foreach:");
    	for(Persona p : mapList.values()) {
    		System.out.println(p);
    	}

    }
}

Espero que les sirva,

Saludos!

Categorías:Java Etiquetas: , , , , , , , ,
  1. Miguel
    noviembre 24, 2011 a las 11:36 pm

    Gracias :D

  2. Jose
    diciembre 13, 2012 a las 1:23 pm

    Entendible (Y)

  3. Alberto
    mayo 21, 2014 a las 4:20 am

    En mi opinión está muy bien explicado y además mostrando las tres posibles maneras, por que normalmente el Foreach no aparece en tutoriales.

  1. No trackbacks yet.

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: