Why does Hashtable not take a null
key?
Also why does HashMap allow null
keys?
What is the purpose of making these two classes Key behaviour so different?
See Question&Answers more detail:osWhy does Hashtable not take a null
key?
Also why does HashMap allow null
keys?
What is the purpose of making these two classes Key behaviour so different?
See Question&Answers more detail:osFrom the Hashtable
JavaDoc:
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))