關於hashmap 和 hashtable 的區別, 在這裡進行一次總結.
hashmap
hashtable
陣列 + 鍊錶/紅黑樹
陣列 + 鍊錶
hashmap的儲存規則:
優先使用陣列儲存, 如果出現hash衝突, 將在陣列的該位置拉伸出鍊錶進行儲存(在鍊錶的尾部進行新增), 如果鍊錶的長度大於設定值後, 將鍊錶轉為紅黑樹.
hashtable的儲存規則:
優先使用陣列儲存, 儲存元素時, 先取出下標上的元素(可能為null), 然後新增到陣列元素entry物件的next屬性中(在鍊錶的頭部進行新增).
出現hash衝突時, 新元素next屬性會指向衝突的元素. 如果沒有hash衝突, 則新元素的next屬性就是null
描述的有點模糊, 貼出原始碼會清晰一點:
entrye = (entry) tab[index];hashmaptab[index] = new entry<>(hash, key, value, e);
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...