Hashtable和HashMap簡單總結(持續更新......)

Hashtable和HashMap的區別頻繁出現在大廠的面試中,根據看的幾篇博客,簡單總結一些自己的思考:

1、安全性方面、多線程應用環境比較:(重要)

Hashtable是線程安全的,它的每個方法中都加入了Synchronize方法。在多線程併發的環境下,可以直接使用Hashtable,不需要自己爲它的方法實現同步。

     HashMap是線程不安全的,在多線程的環境下需要自己增加同步處理,當然多線程環境下也可以使用ConcurrentHashMap

2、Hash映射方面:(重要)

Hashtable對於Hash表的選擇更加高明,在計算Hash值時,直接使用對象的hashCode(hashCode是JDK根據對象的地址或者字符串或者數字算出來的int類型的數值),然後再使用除留餘數發來獲得最終的位置。,因爲要計算除法,所以效率比較低。

      HashMap爲了提高計算效率,將哈希表的大小固定爲了2的冪,這樣在取模預算時,不需要做除法,只需要做位運算。位運算比除法的效率要高很多(HashMap的效率雖然提高了,但是hash衝突卻也增加了,爲了解決這個問題,HashMap重新根據hashcode計算hash值後,又對hash值做了一些運算來打散數據。使得取得的位置更加分散,從而減少了hash衝突。當然了,爲了高效,HashMap只做了一些簡單的位處理。從而不至於把使用2 的冪次方帶來的效率提升給抵消掉。)

 

3、出現時間:(瞭解)
      先有的Hashtable,後有的HashMap:

      Hashtable是java一開始發佈時就提供的鍵值映射的數據結構,而HashMap產生於JDK1.2。雖然Hashtable比HashMap出現的早一些,但是現在Hashtable基本上已經被棄用了。而HashMap已經成爲應用最爲廣泛的一種數據類型了。造成這樣的原因一方面是因爲Hashtable是線程安全的,效率比較低。

以上是本人對Hashtable和HashMap總結出的幾點面試回答,關於兩者的區別更詳細的解答可以關注:

https://blog.csdn.net/wangxing233/article/details/79452946#commentBox

http://www.cnblogs.com/xinzhao/p/5644175.html

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