Win a copy of The Way of the Web Tester: A Beginner's Guide to Automating Tests this week in the Testing forum!

# sorting hashmap based on values

santhoshkumar samala
Ranch Hand
Posts: 156
I need to sort hashmap based on values and not keys.. one more concern here is the values are duplicate..
the hash map has data like

HashMap hashMap=new HashMap();

hashMap.put("aaa",new Integer("333"));
hashMap.put("bbb",new Integer("111"));
hashMap.put("ccc",new Integer("444"));
hashMap.put("eee",new Integer("222"));
hashMap.put("ggg",new Integer("333"));

after sorting the map shuld have the data like

hashMap.put("bbb",new Integer("111"));
hashMap.put("eee",new Integer("222"));
hashMap.put("aaa",new Integer("333"));
hashMap.put("ggg",new Integer("333"));
hashMap.put("ccc",new Integer("444"));

wise owen
Ranch Hand
Posts: 2023

Map someMap= new HashMap();

someMap.put("key1","c");
someMap.put("key2","a");
someMap.put("key3","b");

List mapKeys = new ArrayList(someMap.keySet());
List mapValues = new ArrayList(someMap.values());

someMap.clear();

TreeSet sortedSet = new TreeSet(mapValues);

Object[] sortedArray = sortedSet.toArray();

int size = sortedArray.length;

// a) Ascending sort

for (int i=0; i<size; i++)
{

// System.out.println(sortedArray[i]);

someMap.put(mapKeys.get(mapValues.indexOf(sortedArray[i])), sortedArray[i]);

}

System.out.println(someMap);

someMap.clear();

// b) Descending sort

for (int i=size; i>0
{

someMap.put(mapKeys.get(mapValues.indexOf(sortedArray[--i])), sortedArray[i]);

}

System.out.println(someMap);

Edwin Dalorzo
Ranch Hand
Posts: 961
You could also use a SortedSet<Entry.Map<String,Integer>> instad of a Map.

Then create a Comparator<Map.Entry<String,Integer>> and use it in the TreeMap to get your items ordered according to the value and not the key.