In this article we will discuss how to create a HashMap with multiple values associated with same Key in Java.
Suppose we want to create a HashMap to keep the track of strings and their occurrences in text. For example.
“the” occurred at following indexes 1,4,8,12.
“at” occurred at following indexes 22, 28, 44 ,89
“from” occurred at following indexes 32, 39, 51, 73
To store this data in a lookup table / map , we need to create a HashMap with key as string and then associate multiple values with same key. We can do this by storing a List of Integers i.e. List<Integer> objects as values in HashMap.
HashMap with List<T> Object as Value
Let’s Create a HashMap of String as Key and List<Integer> as value i.e.
// Create a HashMap of key as String List Of integers as Value HashMap<String, List<Integer>> wordFreqMap = new HashMap<>();
Now let’s push elements into this HashMap,
Frequently Asked:
// Create an array Of Occurrences Integer[] occurences = { 12, 8, 4, 1 }; // Add List as value in the map wordFreqMap.put("the", Arrays.asList(occurences)); // Add List as value in the map wordFreqMap.put("at", Arrays.asList(new Integer[] { 28, 44, 22, 89 }));
Complete example is as follows,
package com.thispointer.examples.java.collection.hashmap; import java.util.Arrays; import java.util.HashMap; import java.util.List; public class MultipleValuesListExample { public static void main(String[] args) { // Create a HashMap of key as String List Of integers as Value HashMap<String, List<Integer>> wordFreqMap = new HashMap<>(); // Create an array Of Occurrences Integer[] occurences = { 12, 8, 4, 1 }; // Add List as value in the map wordFreqMap.put("the", Arrays.asList(occurences)); // Add List as value in the map wordFreqMap.put("at", Arrays.asList(new Integer[] { 28, 44, 22, 89 })); // Add List as value in the map wordFreqMap.put("from", Arrays.asList(new Integer[] { 39, 32, 73, 51 })); // Print the Map Contents System.out.println(wordFreqMap); } }
Output:
{the=[12, 8, 4, 1], at=[28, 44, 22, 89], from=[39, 32, 73, 51]}
Idea behind associating Multiple values with same key is to store another Collection as Value in the HashMap. This can be a List or Set or any other Map too.
HashMap with TreeSet as Value
We can create a HashMap with TreeSet as Value too i.e.
// Create a HashMap of key as String List Of integers as Value HashMap<String, TreeSet<Integer>> wordFreqMap = new HashMap<>();
Let’s change the above example and associate keys with TreeSet of Integers instead of List. It will store the Integers in Sorted Order. Checkout complete example as follows,
package com.thispointer.examples.java.collection.hashmap; import java.util.Arrays; import java.util.HashMap; import java.util.TreeSet; public class MultipleValuesSetExample { public static void main(String[] args) { // Create a HashMap of key as String List Of integers as Value HashMap<String, TreeSet<Integer>> wordFreqMap = new HashMap<>(); // Create an array Of Occurrences Integer[] occurences = { 12, 8, 4, 1 }; // Add TreeSet as value in the map wordFreqMap.put("the", new TreeSet<Integer>(Arrays.asList(occurences))); // Add TreeSet as value in the map wordFreqMap.put("at", new TreeSet<Integer>(Arrays.asList(new Integer[] { 28, 44, 22, 89 }))); // Add TreeSet as value in the map wordFreqMap.put("from", new TreeSet<Integer>(Arrays.asList(new Integer[] { 39, 32, 73, 51 }))); // Print the Map Contents System.out.println(wordFreqMap); } }
Output:
{the=[1, 4, 8, 12], at=[22, 28, 44, 89], from=[32, 39, 51, 73]}