HashMap和HashTable的區別

2021-08-26 12:42:49 字數 978 閱讀 8392

關於hashmap 和 hashtable 的區別, 在這裡進行一次總結.

hashmap

hashtable

陣列 + 鍊錶/紅黑樹

陣列 + 鍊錶

hashmap的儲存規則:

優先使用陣列儲存, 如果出現hash衝突, 將在陣列的該位置拉伸出鍊錶進行儲存(在鍊錶的尾部進行新增), 如果鍊錶的長度大於設定值後, 將鍊錶轉為紅黑樹.

hashtable的儲存規則:

優先使用陣列儲存, 儲存元素時, 先取出下標上的元素(可能為null), 然後新增到陣列元素entry物件的next屬性中(在鍊錶的頭部進行新增).

出現hash衝突時, 新元素next屬性會指向衝突的元素. 如果沒有hash衝突, 則新元素的next屬性就是null

描述的有點模糊, 貼出原始碼會清晰一點:

entrye = (entry) tab[index];

tab[index] = new entry<>(hash, key, value, e);

hashmap

hashtable

oldcap * 2

oldcap * 2 + 1

hashmap

hashtable

key, value 均可以為 null

key, value 均可以為 null

hashmap

hashtable

執行緒不安全

執行緒安全

hashmap雖然是執行緒不安全的, 但還是推薦使用, 因為 hashtable實現執行緒安全的方式太低效了, 直接在方法上加了 synchronized 關鍵字來實現的.

我們可以使用 concurrenthashmap 來實現執行緒安全(推薦使用).

或者使用 collections.synchronizedmap(map); 來實現執行緒安全(不推薦, 因為內部是使用了synchronized**塊進行控制併發的).

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...