Java基礎之HashMap與HashTable的聯繫和區別

1.時間

HashTable比HashMap出現的早一個版本,HashTable在1.1,HashMap在1.2

2.父類和接口

相同:都實現了Map、Cloneable、Serializable接口

不同:HashTable繼承的是Dictionary抽象類,HashMap繼承的是AbstractMap抽象類

3.null處理

 HashTable在存儲null鍵時,進行hash計算時會拋出空指針異常;存儲null值時會拋出空指針異常。

 HashMap在存儲null鍵時,將null的hashCode值定爲0,將其存儲在哈希表的第0個bucket中;存儲null值時正常,可以有多個 null值。

4.數據結構

相同:都創建了一個繼承自Map.Entry的私有內部類Entry,同時創建一個Entry類型的引用數組,用來表示哈希表,數組的長度,即使哈希桶的數量,對於映射到同一個哈希桶的鍵值對使用Entry鏈表來存儲。

不同:HashTable的初始長度是11,擴容算法爲n<<1 +1;HashMap的初始長度是16,擴容算法是2*n。

5.線城安全

HashTable是線程安全的,使用了synchronized對方法進行同步。

HashMap是線程不安全的,在多線程場景中可以使用ConcurrentHashMap替代。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章