HashMap is a lightweight implementation of Hashtable (non-thread-safe implementation), they all complete the map interface, mainly different from the hashmap allow null (NULL) key value (key), because of thread safety, more efficient than Hashtable.
HashMap allows NULL to be used as a entry key or value, and Hashtable is not allowed. HashMap Hashtable's contains (including) method was removed, changed to Containsvalue and ContainsKey. Because the contains method is easy to cause misunderstanding.
Hashtable inherits the Dictionary class, and HashMap is an implementation of the map interface introduced by Java1.2.
The biggest difference is that the Hashtable method is Synchroniz (synchronous), and HashMap is not, when multiple threads access Hashtable, they do not need to synchronize their methods, and HashMap must provide it with external synchronization.
The Hash/rehash algorithms used by Hashtable and HashMap are probably the same, so there's no big difference in performance.
The differences between Java collections HashMap and Hashtable