How To Sort HashMap in java Based on Keys and Values

1. Introduction


In this tutorial, We'll learn how to sort HashMap in java based on keys and values. You might have used HashMap widely in your experience but HashMap does not preserve the insertion order and no sorting is done to the keys and values. It just retrieves from its Nodes and LinkedList.

If you have a requirement to sort hashmap by value and sort hashmap by value in java then you need to perform the sorting explicitly because HashMap API is not having the ready-made methods to use. You are at the place now you will learn how to sort HashMap by keys and values using TreeMap. If you answer this then next you will be asked "How to sort HashMap without using TreeMap"

Sorting TreeMap By Value (+ Java 8)

2. HashMap Sort By keys


The below example shows the program to sort the HashMap based on the keys using TreeMap. First, create HashMap and add values to it. Next, pass this hashmap to TreeMap constructor which does sorting by default bu keys.

package com.java.w3schools.blog.java.program.to.strings;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;

public class HashMapSortBykey {

public static void main(String[] args) {

HashMap idAges = new HashMap<>();

idAges.put(103, 24);
idAges.put(104, 35);
idAges.put(102, 20);
idAges.put(107, 23);
idAges.put(105, 45);
idAges.put(101, 18);

Set> entrieset = idAges.entrySet();

Iterator> it = entrieset.iterator();

System.out.println("HashMap before sorting by key : ");
while (it.hasNext()) {
Entry entry = it.next();
System.out.println("Key : " + entry.getKey() + " - Value - " + entry.getValue());
}

System.out.println();
System.out.println("HashMap after sorting by key : ");

TreeMap treeMap = new TreeMap<>(idAges);

Set> set = treeMap.entrySet();

Iterator> iterator = set.iterator();

while (iterator.hasNext()) {
Entry entry = iterator.next();
System.out.println("Key : " + entry.getKey() + " - Value - " + entry.getValue());
}

}

}

Output:

HashMap before sorting by key : 
Key : 101 - Value - 18
Key : 102 - Value - 20
Key : 103 - Value - 24
Key : 104 - Value - 35
Key : 105 - Value - 45
Key : 107 - Value - 23

HashMap after sorting by key :
Key : 101 - Value - 18
Key : 102 - Value - 20
Key : 103 - Value - 24
Key : 104 - Value - 35
Key : 105 - Value - 45
Key : 107 - Value - 23


3. HashMap Sort By Values


This is quite tricky to sort the map by values. But, You need to create a first comparator that sorts based on the value instead of a key.
  • Create HashMap and add values to it.
  • Get the entrySet() from hashmap.
  • convert enttrySet() to LinkedList<Entry<K, V>>
  • Call Collections.sort() method by passing LinkedList and comparator. This comparator should have comparisons based on value.
  • Create a LinkedHashMap object and add all values of LinkedList.
  • Print LinkedHashMap which is sorted by value.


Note: LinkedHashMap is a subclass of HashMap.

Look at the below program.

Creating HashMap with id as key and age as value.

package com.java.w3schools.blog.java.program.to.strings;

import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;

public class HashMapSortByValue {

private static HashMap sortByValues(HashMap map) {

// creating LinkedList object
List> linkedList = new LinkedList<>(map.entrySet());

// sorting based on the values.
Collections.sort(linkedList, new Comparator() {
public int compare(Object o1, Object o2) {
return ((Comparable) ((Map.Entry) (o1)).getValue()).compareTo(((Map.Entry) (o2)).getValue());
}
});

// First created LinkHashMap which preserves the insertion order.
HashMap sortedHashMap = new LinkedHashMap();

// Iterating over linkedList
for (Iterator it = linkedList.iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry) it.next();

// adding key, value pair to the map.
sortedHashMap.put(entry.getKey(), entry.getValue());
}
// returning the sorted map.
return sortedHashMap;
}

public static void main(String[] args) {
// Creating HashMap with id as key and age as value.
HashMap idAges = new HashMap<>();

idAges.put(103, 24);
idAges.put(104, 35);
idAges.put(102, 20);
idAges.put(107, 23);
idAges.put(105, 45);
idAges.put(101, 18);

Set> entrieset = idAges.entrySet();

Iterator> it = entrieset.iterator();

System.out.println("HashMap before sorting by key : ");
while (it.hasNext()) {
Entry entry = it.next();
System.out.println("Key : " + entry.getKey() + " - Value - " + entry.getValue());
}

System.out.println();
System.out.println("HashMap after sorting by key : ");

Map sortedMap = sortByValues(idAges);

Set> set = sortedMap.entrySet();

Iterator> iterator = set.iterator();

while (iterator.hasNext()) {
Entry entry = iterator.next();
System.out.println("Key : " + entry.getKey() + " - Value - " + entry.getValue());
}

}

}

Output:

HashMap before sorting by key : 
Key : 101 - Value - 18
Key : 102 - Value - 20
Key : 103 - Value - 24
Key : 104 - Value - 35
Key : 105 - Value - 45
Key : 107 - Value - 23

HashMap after sorting by key :
Key : 101 - Value - 18
Key : 102 - Value - 20
Key : 107 - Value - 23
Key : 103 - Value - 24
Key : 104 - Value - 35
Key : 105 - Value - 45

Observe the output which is sorted by values after calling sortByValues() method.

4. Conclusion


In this article, We've seen how to sort HashMap by Keys and Values in Java.

GitHub Code By Key

GitHub Code By Value



0 Comments