Wednesday 9 April 2014

Why hashtable does not allow null key and value whereas Hashmap does?

To successfully store and retrieve objects from a hashtable,
the objects used
as keys must implement the hashCode method and the equals
method.

In a nutshell, since null isn't an object, you can't call
.equals() or .hashCode() on it, so the Hashtable can't
compute a hash to use it as a key.

HashMap is newer, and has more advanced capabilities, which
are basically just an improvement on the Hashtable
functionality. As such, when HashMap was created, it was
specifically designed to handle null values as keys and
handles them as a special case.

Specifically, the use of null as a key is handled like this
when issuing a .get(key):

(key==null ? k==null : key.equals(k))
 

In short, HashTable was designed in older versions of java and it used to throw NullPointerException while equals and hashcode was invoked. This was solved when new version of Java came and HashMap was introduced.

No comments:

Post a Comment