7

Possible Duplicate:
How to sort a Map<Key, Value> on the values in Java?

In my project, I have taken a HashMap like this

HashMap degree = new HashMap();

Suppose I have:

degree.put("a",5);
degree.put("b",2);
degree.put("c",4);
degree.put("d",2);
degree.put("e",3);
degree.put("f",5);

Now I have to Sort this list according to given Integer values

Sorted HashMap Should be :

{a=5, f=5, c=4, e=4, b=4, d=2}

How I can do this ?

Community
  • 1
  • 1
Hardik
  • 335
  • 2
  • 5
  • 12

4 Answers4

11

A HashMap is an unordered collection. It has no sort order. Even a TreeMap will sort by key, not value.

If you want to prepare a sorted list by the sort order of the values, you'll have to create an appropriate object, such as an ArrayList<Map.Entry<String,Integer>>, iterate over your HashMap and insert all the entries, and then call Collections.sort with a collation function.

bmargulies
  • 97,814
  • 39
  • 186
  • 310
4

If you want sorted map, HashMap isn't the best approach.

I'd suggest taking a look at TreeMap as it is sorted. You can set the comparator to compare the values instead of the keys, as they do in this answer:

https://stackoverflow.com/a/1283722/975959

Community
  • 1
  • 1
La bla bla
  • 8,558
  • 13
  • 60
  • 109
1
ArrayList<Integer> sortedHashMap=new ArrayList<Integer>();

for("your Object" m : degree.values())
{
      sortedHashMap.add(m);
}

collections.sort(sortedHashMap);

so ,you can print your hashMap as sorted hashMap!

user1438021
  • 17
  • 2
  • 4
0

You can do insertion sort to build a new hashmap from the original(takes x2 memory and is very inefficient). So, you will need to use .get() and .set() methods of the hashmap nearly n*n(worst case) times where n is the number of elements.

huseyin tugrul buyukisik
  • 11,469
  • 4
  • 45
  • 97