主要的差異是以下三個部分:

  1. 線程安全性 thread safety
  2. 同步 synchronization
  3. 速度

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 慢。

results matching ""

    No results matching ""