HashMap is a part of Java’s collection since Java 1.2. It provides the basic implementation of Map interface of Java which stores the data in (Key, Value) pairs. To access a value in HashMap, one must know its key. HashMap is known as HashMap because it uses a technique Hashing for storage of data.
The TreeMap in Java is used to implement Map interface and NavigableMap along with the Abstract Class. The map is sorted according to the natural ordering of its keys, or by a Comparator provided at map creation time, depending on which constructor is used. This proves to be an efficient way of sorting and storing the key-value pairs.
Below are methods to convert HashMap to TreeMap in Java in such a way that the resultant TreeMap should contain all mappings of the HashMap, sorted by their natural ordering of keys.
Examples:
Input: HashMap: {1=Geeks, 2=forGeeks, 3=A computer Portal}
Output: TreeMap: {1=Geeks, 2=forGeeks, 3=A computer Portal}Input: HashMap: {1=1, 2=2, 3=3}
Output: TreeMap: {1=1, 2=2, 3=3}
Below are methods to convert HashMap to TreeMap in Java:
1. In Java 8: This method includes converting the HashMap to a Stream and collects elements of a stream in a TreeMap using Stream.collect() method which accepts a collector.
Algorithm:
- Get the HashMap to be converted.
- Get the entries from the hashMap
- Convert the map entries into stream
- Using Collectors, collect the entries and convert it into TreeMap
- Now collect the TreeMap
- Return the formed TreeMap
Program:
Java
// Java Program to convert // HashMap to TreeMap in Java 8 import java.util.*; import java.util.stream.*; class GFG { // Generic function to construct a new // TreeMap from HashMap public static <K, V> Map<K, V> convertToTreeMap(Map<K, V> hashMap) { Map<K, V> treeMap = hashMap // Get the entries from the hashMap .entrySet() // Convert the map into stream .stream() // Now collect the returned TreeMap .collect( Collectors // Using Collectors, collect the entries // and convert it into TreeMap .toMap( Map.Entry::getKey, Map.Entry::getValue, (oldValue, newValue) -> newValue, TreeMap:: new )); // Return the TreeMap return treeMap; } public static void main(String args[]) { // Create a HashMap Map<String, String> hashMap = new HashMap<>(); // Add entries to the HashMap hashMap.put( "1" , "Geeks" ); hashMap.put( "2" , "forGeeks" ); hashMap.put( "3" , "A computer Portal" ); // Print the HashMap System.out.println( "HashMap: " + hashMap); // construct a new TreeMap from HashMap Map<String, String> treeMap = convertToTreeMap(hashMap); // Print the TreeMap System.out.println( "TreeMap: " + treeMap); } } |
Output:
HashMap: {1=Geeks, 2=forGeeks, 3=A computer Portal} TreeMap: {1=Geeks, 2=forGeeks, 3=A computer Portal}
2. Using Plain Java: In this method, either pass HashMap instance to the TreeMap constructor or to putAll() method. This will directly create the TreeMap from the HashMap.
Algorithm:
- Get the HashMap to be converted.
- Create a new TreeMap
- Pass the hashMap to putAll() method of treeMap
- Return the formed TreeMap
Program:
Java
// Java Program to convert // HashMap to TreeMap in Java 8 import java.util.*; import java.util.stream.*; class GFG { // Generic function to construct a // new TreeMap from HashMap public static <K, V> Map<K, V> convertToTreeMap(Map<K, V> hashMap) { // Create a new TreeMap Map<K, V> treeMap = new TreeMap<>(); // Pass the hashMap to putAll() method treeMap.putAll(hashMap); // Return the TreeMap return treeMap; } public static void main(String args[]) { // Create a HashMap Map<String, String> hashMap = new HashMap<>(); // Add entries to the HashMap hashMap.put( "1" , "Geeks" ); hashMap.put( "2" , "forGeeks" ); hashMap.put( "3" , "A computer Portal" ); // Print the HashMap System.out.println( "HashMap: " + hashMap); // construct a new TreeMap from HashMap Map<String, String> treeMap = convertToTreeMap(hashMap); // Print the TreeMap System.out.println( "TreeMap: " + treeMap); } } |
Output:
HashMap: {1=Geeks, 2=forGeeks, 3=A computer Portal} TreeMap: {1=Geeks, 2=forGeeks, 3=A computer Portal}
3. Using Google’s Guava library: Guava also provides a TreeMap implementation which can be used to create an empty TreeMap instance.
Algorithm:
- Get the HashMap to be converted.
- Create a new TreeMap using Maps.newTreeMap() of Guava library
- Pass the hashMap to putAll() method of treeMap
- Return the formed TreeMap
Program:
Java
// Java Program to convert // HashMap to TreeMap in Java 8 import com.google.common.collect.*; import java.util.*; import java.util.stream.*; class GFG { // Generic function to construct a // new TreeMap from HashMap public static <K extends Comparable, V> Map<K, V> convertToTreeMap(Map<K, V> hashMap) { // Create a new TreeMap Map<K, V> treeMap = Maps.newTreeMap(); // Pass the hashMap to putAll() method treeMap.putAll(hashMap); // Return the TreeMap return treeMap; } public static void main(String args[]) { // Create a HashMap Map<String, String> hashMap = new HashMap<>(); // Add entries to the HashMap hashMap.put( "1" , "Geeks" ); hashMap.put( "2" , "forGeeks" ); hashMap.put( "3" , "A computer Portal" ); // Print the HashMap System.out.println( "HashMap: " + hashMap); // construct a new TreeMap from HashMap Map<String, String> treeMap = convertToTreeMap(hashMap); // Print the TreeMap System.out.println( "TreeMap: " + treeMap); } } |
Output:
HashMap: {1=Geeks, 2=forGeeks, 3=A computer Portal} TreeMap: {1=Geeks, 2=forGeeks, 3=A computer Portal}
4. Conversion between incompatible types: This method can be used if the required TreeMap is of the different type than the HashMap. In this, the conversion needs to be done manually.
Algorithm:
- Get the HashMap to be converted.
- Create a new TreeMap
- For each entry of the hashMap:
- Convert the Key and the Value into the desired type by casting
- Insert the converted pair by put() method of treeMap
- Return the formed TreeMap
Program:
Java
// Java Program to convert // HashMap to TreeMap in Java 8 import java.util.*; import java.util.stream.*; class GFG { // Function to construct a new TreeMap from HashMap public static Map<Integer, String> convertToTreeMap(Map<String, String> hashMap) { // Create a new TreeMap Map<Integer, String> treeMap = new TreeMap<>(); // Convert the HashMap to TreeMap manually for (Map.Entry<String, String> e : hashMap.entrySet()) { treeMap.put(Integer.parseInt(e.getKey()), e.getValue()); } // Return the TreeMap return treeMap; } public static void main(String args[]) { // Create a HashMap Map<String, String> hashMap = new HashMap<>(); // Add entries to the HashMap hashMap.put( "1" , "Geeks" ); hashMap.put( "2" , "forGeeks" ); hashMap.put( "3" , "A computer Portal" ); // Print the HashMap System.out.println( "HashMap: " + hashMap); // construct a new TreeMap<Integer, String> // from HashMap<String, String> Map<Integer, String> treeMap = convertToTreeMap(hashMap); // Print the TreeMap System.out.println( "TreeMap: " + treeMap); } } |
Output:
HashMap: {1=Geeks, 2=forGeeks, 3=A computer Portal} TreeMap: {1=Geeks, 2=forGeeks, 3=A computer Portal}