1.The
HashMap class is roughly equivalent to
Hashtable, except that it is non synchronized and permits nulls. (HashMap allows null values as key and value whereas HashTable doesn't allow nulls).
2. One of the major
differences between HashMap and Hashtable is that HashMap is non synchronized whereas Hashtable is synchronized, which means
Hashtable is thread-safe and can be shared between multiple threads but
HashMap can not be shared between multiple threads without proper synchronization. Java 5 introduces ConcurrentHashMap
which is an alternative of Hashtable and provides better scalability than Hashtable in Java.
3. Another significant difference between HashMap vs Hashtable is that
Iterator in the HashMap is a fail-fast iterator while the enumerator for the Hashtable is not and throw
ConcurrentModificationException if any other Thread modifies the map structurally by adding or removing any element except
Iterator's own
remove() method. But this is not a guaranteed behavior and will be done by JVM on best effort.
4. One more notable difference between Hashtable and HashMap is that because of thread-safety and synchronization Hashtable is much slower than HashMap if used in Single threaded environment. So if you don't need synchronization and HashMap is only used by one thread, it out perform Hashtable in Java.
5. HashMap does not guarantee that the order of the map will remain constant over time.
4. One more notable difference between Hashtable and HashMap is that because of thread-safety and synchronization Hashtable is much slower than HashMap if used in Single threaded environment. So if you don't need synchronization and HashMap is only used by one thread, it out perform Hashtable in Java.
5. HashMap does not guarantee that the order of the map will remain constant over time.
HashMap and Hashtable : note on Some Important Terms
1)Synchronized means only one Thread can modify a hash table at one point of time. Basically, it means that any thread before performing an update on a
Hashtable will have to acquire a lock on the object while others will wait for lock to be released.
2) Fail-safe is relevant from the context of iterators. If an Iterator/ListIterator has been created on a collection object and some other thread tries to modify the collection object "structurally", a concurrent modification exception will be thrown. It is possible for other threads though to invoke "set" method since it doesn't modify the collection "
structurally". However, if prior to calling "set", the collection has been modified structurally, "
IllegalArgumentException" will be thrown.
3) Structurally modification means deleting or inserting element which could effectively change the structure of map.
HashMap can be synchronized by
Map m = Collections.synchronizeMap(hashMap);
In Summary there are significant
differences between Hashtable and HashMap in Java e.g. thread-safety and speed and based upon that only use Hashtable if you absolutely need thread-safety, if you are running Java 5 consider using
ConcurrentHashMap in Java.