How you decide when to use HashMap or TreeMap
Answer: Below are points:
HashMap | TreeMap |
It uses a hash table to store the map (Internally it uses array and hashing function to store elements) | TreeMap creates maps that stored in tree structure |
Insert or delete is costly because hashing converts key into index where the object will be stored and new copies key/value to new array | TreeMap store data in sorted tree structure it never need to allocate more space and copy the over it |
HashMap provides O(1) look up time | TreeMap provides O(log n) lookup time |
Because It uses a hash table to store the map. This technique allows total execution time of get( ) method and put( ) method remain constant for large sets as well. | TreeMap offers effective means of storingKey and value pairs in sorted order and allows fast retrieval |
HashMap doesn’t give any guarantees that elements will be in sorted order | Treemap gives guarantees that elements will be sorted order and by default is ascending key order. |
Decision: Because HahsMap gives better performance if you don’t need sorting then go for HashMap otherwise TreeMap would be choice. You have also option available to use LinkdeHashMap which is same fast as HashMap including it gives remove/add/contains functionality and also maintains insertion order.
Please have example java code for HashMap and TreeMap:
package com.javahonk.hashmaptable; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.TreeMap; public class HashMapTableTest { public static void main(String[] args) { Map<String, String> map = new HashMap<String, String>(); map.put("Java", "Java"); map.put("Honk", "Honk"); System.out.println("HashMap example"); Iterator<Entry<String, String>> it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry<String,String> entry = (Map.Entry<String,String>) it.next(); String key = (String) entry.getKey(); String val = (String) entry.getValue(); System.out.println("Key: " + key + " Value: " + val); } System.out.println("\nTreeMap example"); TreeMap<String, Double> treeMap = new TreeMap<String, Double>(); treeMap.put("Java Honk", new Double(2000.24)); treeMap.put("Bill Peng", new Double(1500.22)); treeMap.put("Tom Nally", new Double(2522.63)); Set<Map.Entry<String, Double>> set = treeMap.entrySet(); for(Map.Entry<String, Double> me : set) { System.out.print(me.getKey() + ": "); System.out.println(me.getValue()); } System.out.println(); } }
Output: