HashMap和HashTable的區別

2022-06-20 12:57:16 字數 1172 閱讀 4887

hashmap和hashtable的區別

1、繼承的父類不同

hashtable繼承自dictionary類,而hashmap繼承自abstractmap類。但二者都實現了map介面。

2、執行緒安全性不同

hashmap底層是乙個entry陣列,當發生hash衝突的時候,hashmap是採用鍊錶的方式來解決的-鍊錶陣列

假如a執行緒和b執行緒同時對同乙個陣列位置呼叫addentry,兩個執行緒會同時得到現在的頭結點,然後a寫入新的頭結點之後,b也寫入新的頭結點,那b的寫入操作就會覆蓋a的寫入操作造成a的寫入操作丟失

4、key和value是否允許null值

hashtable中,key和value都不允許出現null值

但是如果在hashtable中有類似put(null,null)的操作,編譯同樣可以通過

7、內部實現使用的陣列初始化和擴容方式不同

hashtable在不指定容量的情況下的預設容量為11,而hashmap為16,hashtable不要求底層陣列的容量一定要為2的整數次冪,而hashmap則要求一定為2的整數次冪。

hashtable擴容時,將容量變為原來的2倍加1,而hashmap擴容時,將容量變為原來的2倍。

hashtable和hashmap它們兩個內部實現方式的陣列的初始大小和擴容的方式。hashtable中hash陣列預設大小是11,增加的方式是 old*2+1

hashtable使用synchronized來保證執行緒安全

currenthashmap:底層原理

currenthashmap相當於優化了hashtable的同步部分,其中有鎖的陣列,分別用於其中的一部分資料 多執行緒訪問的是容器中的不同鎖,執行緒之間就不會有那麼高的鎖競爭

結構:segment陣列結構:可重入鎖(reentrantlock)

hashentry陣列結構:用於儲存鍵值對資料

每個segment守護者乙個hashentry陣列裡的元素

在元素操作時,不斷的使用雜湊演算法來定位segment

方法:get是不需要加鎖的 因為他使用了volatile關鍵字 保證了讀取的原子性 hashtable的讀取是需要加鎖的

put方法是需要枷鎖的,首先定位到segment 然後再segment裡面進行插入操作 插入之前先判斷是否擴容,然後再操作,擴容是擴容成兩倍

size 全聚德count被volatile修飾

HashMap的工作原理和hashtable區別

1.hashmap的工作原理?hashmap底層是陣列 鍊錶 以陣列儲存元素,如有hash相同的元素,在陣列結構中,建立鍊錶結構,再把hash相同的元素放到鍊錶的下乙個節點 基於hashing 雜湊法 雜湊法 是一種將字元組成的字串轉換為固定長度的數值或索引值的方法 的原理。通過put get 方法...

HashMap和LinkedHashMap的區別

hashmap,linkedhashmap,treemap都屬於map map 主要用於儲存鍵 key 值 value 對,根據鍵得到值,因此鍵不允許鍵重複,但允許值重複。hashmap 是乙個最常用的map,它根據鍵的hashcode 值儲存資料,根據鍵可以直接獲取它的值,具有很快的訪問速度。ha...

HashMap和LinkedHashMap的區別

hashmap,linkedhashmap,treemap都屬於map map 主要用於儲存鍵 key 值 value 對,根據鍵得到值,因此鍵不允許鍵重複,但允許值重複。hashmap 是乙個最常用的map,它根據鍵的hashcode 值儲存資料,根據鍵可以直接獲取它的值,具有很快的訪問速度。ha...