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 ?

2
  • Seems to me that the original HashMap sorted according to the integer values would in fact be like { a = 5, f = 5, c = 4, e = 3, b = 2, d = 2 }. Commented Sep 1, 2012 at 16:49
  • Check this out stackoverflow.com/questions/109383/… Commented Sep 1, 2012 at 16:51

4 Answers 4

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.

Sign up to request clarification or add additional context in comments.

Comments

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

1 Comment

Better not plan on calling .get() on that TreeMap if it's looking at values.
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!

Comments

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.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.