lunes, 15 de junio de 2009

Ordenamiento de mapas

Hace un tiempo me tocó buscar como forzar el orden FIFO ("First in First out") en un mapa. Cuando usaba un HashMap siempre obtenía un orden aleatorio y el TreeMap no me servía por su ordenamiento alfabético. Para estos casos existe la clase LinkedHashMap. Veamos el comportamiento para cada uno de los mapas mencionados.

HashMap



import java.util.HashMap;

public class Mapas{

public static void main(String[] args) {
Map<string, Integer> promedios = new HashMap<string, Integer>();
promedios.put("Blanca", 95);
promedios.put("Gabriel", 90);
promedios.put("Daniela", 85);
promedios.put("Juana", 70);
promedios.put("Alejandro", 50);

for (Iterator<string> keys=promedios.keySet().iterator(); keys.hasNext();) {
String estudiante = keys.next();
int promedio = promedios.get(estudiante);
System.out.println(estudiante + ": " + promedio);
}
}
}
Salida:

Blanca: 95
Juana: 70
Gabriel: 90
Alejandro: 50
Daniela: 85



TreeMap


import java.util.TreeMap;

public class Mapas{

public static void main(String[] args) {
Map<string, Integer> promedios = new TreeMap<string, Integer>();
promedios.put("Blanca", 95);
promedios.put("Gabriel", 90);
promedios.put("Daniela", 85);
promedios.put("Juana", 70);
promedios.put("Alejandro", 50);

for (Iterator<string> keys=promedios.keySet().iterator(); keys.hasNext();) {
String estudiante = keys.next();
int promedio = promedios.get(estudiante);
System.out.println(estudiante + ": " + promedio);
}
}
}
Salida:

Alejandro: 50
Blanca: 95
Daniela: 85
Gabriel: 90
Juana: 70


LinkedHashMap

import java.util.LinkedHashMap;

public class Mapas{

public static void main(String[] args) {
Map<string, Integer> promedios = new LinkedHashMap<string, Integer>();
promedios.put("Blanca", 95);
promedios.put("Gabriel", 90);
promedios.put("Daniela", 85);
promedios.put("Juana", 70);
promedios.put("Alejandro", 50);

for (Iterator<string> keys=promedios.keySet().iterator(); keys.hasNext();) {
String estudiante = keys.next();
int promedio = promedios.get(estudiante);
System.out.println(estudiante + ": " + promedio);
}
}
}

Salida:

Blanca: 95
Gabriel: 90
Daniela: 85
Juana: 70
Alejandro: 50

1 comentario:

  1. El ejemplo de LinkedHashMap utiliza un HashMap, así que creo que tienes un pequeño error en esa línea.

    ResponderEliminar