Is there a way to get the value of a HashMap randomly in Java? Of Course, below is a simple Java Code which represents the same.
Also, at the end of program there is a bonus code to Shuffle complete HashMap. Reshuffling a large collection is always going to be expensive. You are going to need at least one reference per entry. e.g. for 1 million entries you will need approx 4 MB.
Note; the shuffle operation is O(N)
package com.crunchify.tutorials;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
/**
* @author Crunchify.com
*
*/
public class CrunchifyGetRandomKeyValueFromHashMap {
public static void main(String[] args) {
//
// Create a hashtable and put some key-value pair.
//
HashMap<String, String> companies = new HashMap<String, String>();
companies.put("eBay", "South San Jose");
companies.put("Paypal", "North San Jose");
companies.put("Google", "Mountain View");
companies.put("Yahoo", "Santa Clara");
companies.put("Twitter", "San Francisco");
// Get a random entry from the HashMap.
Object[] crunchifyKeys = companies.keySet().toArray();
Object key = crunchifyKeys[new Random().nextInt(crunchifyKeys.length)];
System.out.println("************ Random Value ************ \n" + key + " :: " + companies.get(key));
List<Map.Entry<String, String>> list = new ArrayList<Map.Entry<String, String>>(companies.entrySet());
// Bonus Crunchify Tips: How to Shuffle a List??
// Each time you get a different order...
System.out.println("\n************ Now Let's start shuffling list ************");
Collections.shuffle(list);
for (Map.Entry<String, String> entry : list) {
System.out.println(entry.getKey() + " :: " + entry.getValue());
}
}
}
Other must read:
- How to convert HashMap to ArrayList in Java?
- Java: How to Find Maximum Occurrence of Words from Text File?
Output:
************ Random Value ************ Twitter :: San Francisco ************ Now Let's start shuffling list ************ Paypal :: North San Jose eBay :: South San Jose Google :: Mountain View Twitter :: San Francisco Yahoo :: Santa Clara

