Both provide key-value
access to data.
The Hashtable is one of the original collection classes in Java. HashMap
is part of the new Collections Framework, added with Java 2, v1.2.
The key difference between the two is that access to the Hashtable is synchronized on the table while access to the HashMap isn't. You can add it, but it isn't there by default.
Another difference is that iterator in the HashMap is fail-safe while the enumerator for the Hashtable isn't. If you change the map while iterating, you'll know.
And, a third difference is that HashMap permits null values in it, while Hashtable doesn't.
For new code, I would tend to always use HashMap.
The key difference between the two is that access to the Hashtable is synchronized on the table while access to the HashMap isn't. You can add it, but it isn't there by default.
Another difference is that iterator in the HashMap is fail-safe while the enumerator for the Hashtable isn't. If you change the map while iterating, you'll know.
And, a third difference is that HashMap permits null values in it, while Hashtable doesn't.
For new code, I would tend to always use HashMap.
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. HashMap does not guarantee that the order of the map will remain constant over time.
3. HashMap is non synchronized whereas Hashtable is synchronized.
4.
Iterator in the HashMap is fail-fast 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.
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 has been created on a collection
object and some other thread tries to modify the collection object
"structurally", a concurrent modification
exception wjavascript:void(0)ill 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);
No comments:
Post a Comment