Java: cómo ordenar un Map
Thursday, August 12th, 2010El siguiente código muestra los pasos más sencillos para un ordenar un mapa (java.util.Map) en Java:
public class SortMapExample{
public static void main(String[] args) {
System.out.println("Unsort Map......");
Map<String,String> unsortMap = new HashMap<String,String>();
unsortMap.put("1", "1");
unsortMap.put("2", "A");
unsortMap.put("3", "2");
unsortMap.put("4", "B");
unsortMap.put("5", "C");
unsortMap.put("6", "c");
unsortMap.put("7", "b");
unsortMap.put("8", "a");
Iterator iterator=unsortMap.entrySet().iterator();
for (Map.Entry entry : unsortMap.entrySet()) {
System.out.println("Key : " + entry.getKey()
+ " Value : " + entry.getValue());
}
System.out.println("Sorted Map......");
Map<String,String> sortedMap = sortByComparator(unsortMap);
for (Map.Entry entry : sortedMap.entrySet()) {
System.out.println("Key : " + entry.getKey()
+ " Value : " + entry.getValue());
}
}
private static Map sortByComparator(Map unsortMap) {
List list = new LinkedList(unsortMap.entrySet());
//sort list based on comparator
Collections.sort(list, new Comparator() {
public int compare(Object o1, Object o2) {
return ((Comparable) ((Map.Entry) (o1)).getValue())
.compareTo(((Map.Entry) (o2)).getValue());
}
});
//put sorted list into map again
Map sortedMap = new LinkedHashMap();
for (Iterator it = list.iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry)it.next();
sortedMap.put(entry.getKey(), entry.getValue());
}
return sortedMap;
}
}
El algoritmo implica las siguientes transformaciones:
Map –> List –> Order List –> Map
A priori, no parece que sea un algoritmo muy optimizado. ¿Alguna sugerencia para mejorar el rendimiento?
Vía | http://www.mkyong.com