HashMap vs Hashtable vs HashSet
Posted on 24. Aug, 2009 by Tahir Akram in Development
I was reading about collection framework of Java. And was studying Hashtable, HashMap and HashSet. Its quite interesting to know the differences between them. In this post I will discuss these three with examples.
Hashtable
Hashtable is basically a datastructure to retain values of key-value pair.
- It didn’t allow null for both key and value. You will get NullPointerException if you add null value.
- It is synchronized. So it comes with its cost. Only one thread can access in one time
Hashtable<Integer,String>; cityTable = new Hashtable<Integer,String>(); cityTable.put(1, "Lahore"); cityTable.put(2, "Karachi"); cityTable.put(3, null); /* NullPointerEcxeption at runtime*/ System.out.println(cityTable.get(1)); System.out.println(cityTable.get(2)); System.out.println(cityTable.get(3));
HashMap
Like Hashtable it also accepts key value pair.
- It allows null for both key and value
- It is unsynchronized. So come up with better performance
HashMap<Integer,String> productMap = new HashMap<Integer,String>(); productMap.put(1, "Keys"); productMap.put(2, null);
HashSet
HashSet does not allow duplicate values. It provides add method rather put method. You also use its contain method to check whether the object is already available in HashSet. HashSet can be used where you want to maintain a unique list.
HashSet<String> stateSet = new HashSet<String>();
stateSet.add ("CA");
stateSet.add ("WI");
stateSet.add ("NY");
if (stateSet.contains("PB")) /* if CA, it will not add but shows following message*/
System.out.println("Already found");
else
stateSet.add("PB");



Patrick
25. Aug, 2009
You should mention that Hashtable and HashMap both implement Map but HashSet implements Set !!! Map and Set are not meant for the same use. The Hash* is just an indication on how these Maps and Set are implemented…
Tahir Akram
25. Aug, 2009
Thanks Patrick for your comments. I will definitely update it.
Trent
26. Aug, 2009
You also forgot LinkedHashSet, which is useful when you want to iterate in the order that items were inserted.
geo
26. Aug, 2009
There’s also a LinkedHashMap, which you can use to iterate over the keys in insertion order.
teto
27. Aug, 2009
There is also a EnumMap and EnumSet, that are optimized versions to be used with enums, the underlying implementation uses an array to hold the elements and thus the performance is better. Take a look at the javadocs, it could be interesting.
Nils Breunese
29. Aug, 2009
And don’t forget ConcurrentHashMap in the java.util.concurrent packages: http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/ConcurrentHashMap.html
Zia Ur Rahman Baig
25. Mar, 2010
Another difference is that iterator in the HashMap is fail-safe while the enumerator for the Hashtable isn’t.
java hunter
07. May, 2010
its better understanding for java beginners… thanks lot..