主要的差異是以下三個部分:
- 線程安全性 thread safety
- 同步 synchronization
- 速度
Hashtable 可以說是個過時類的集合,在 Java 4 被重寫而有了 Map interface。原則上,HashMap 很可以等價於 Hashtable,但還是存在些許的差異
主要差異是,HashMap 是非同步的,可以接受 null 當作 key or value,但 Hashtable 則相反。所以這意味著,HashMap 不是線程安全。但這點在 Java 5 獲得改善,可以使用 ConcurrentHashMap,擴展性比 Hashtable 更好
另一個區別是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以當有其它線程改變了HashMap的結構(增加或者移除元素),將會拋出ConcurrentModificationException,但迭代器本身的remove()方法移除元素則不會拋出ConcurrentModificationException異常。但這並不是一個一定發生的行為,要看JVM。這條同樣也是Enumeration和Iterator的區別。
速度的話,因為 Hashtable 是同步而且線程安全,因此在單線程會比 HashMap 慢。