那么多大佬解釋這個問題,太長了根本看不進去,自己簡短總結一下吧!
1、HashMap是執行緒不安全的,在多執行緒環境下會容易產生死回圈,但是單執行緒環境下運行效率高;Hashtable執行緒安全的,很多方法都有synchronized修飾,但同時因為加鎖導致單執行緒環境下效率較低。
2、HashMap允許有一個key為null,允許多個value為null;而Hashtable不允許key或者value為null
3,底層陣列的長度不同HashMap的底層陣列的長度必須為2^n,這樣做的好處是為以后的hash演算法做準備,而Hashtable底層陣列的長度可以為任意值,這就造成了當底層陣列長度為合數的時候,Hashtable的hash演算法散射不均勻,容易產生hash沖突。
4,哈希演算法不同Hashtable的hash演算法首先使得hash的值小于等于整型數的最大值,再通過%運算實作均勻散射。
由于計算機是底層的運算是基于2進制的,所以HashMap的hash演算法使用&運算代替%運算,在運算速度上明顯HashMap的hash演算法更優。
5,擴容的機制有區別:HashMap陣列的擴容的整體思想就是創建一個長度為原先2倍的陣列。然后對原陣列進行遍歷和復制
Hashtable的擴容將先創建一個長度為原長度2倍的陣列,再使用頭插法將鏈表進行反序
6,結構有區別:HashMap在jdk1.8在原先的陣列+鏈表的結構進行了優化,將實作結構變為陣列+鏈表+紅黑樹,在一條鏈表節點元素大于8的時候,會將鏈表封裝成紅黑樹
Hashtable到了jdk1.8了內部結構并沒有實質優化,繼續使用陣列+鏈表的方式實作
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/177118.html
標籤:Java相關
下一篇:java 學習打卡
