hashMap和hashTable的不同之處

2021-10-11 18:47:16 字數 1400 閱讀 4271

hashmap

1、1.7 新增元素時,首先通過hash方法獲取雜湊值,通過indexfor方法獲取索引,在1.8版本中,indexfor取消了,直接使用陣列長度-1取模hash值得方式獲取

2、1.7 hashmap的資料結構為陣列+鍊錶,在1.8版本中,資料結構採用的是陣列+鍊錶/紅黑樹,鍊錶或者紅黑樹的處理方式為:當鍊表深度達到預設值8時,會擴容自動轉為紅黑樹,轉為紅黑樹的目的是,查詢索引位置會更快,當深度小於6時,紅黑樹會再次轉換為鍊錶

3、1.7 hashmap插入資料採用的是頭插入法,就相當於壓棧操作,新加入的元素始終在陣列的索引處,而非下掛的鍊錶處,這樣就會產生環鏈的問題。在1.8版本中,採用的是尾插入法,因為使用了紅黑樹可以避免環鏈問題的產生。

4、擴容機制:jdk1.7用了9次擾動處理=4次位運算+5次異或,而jdk1.8只用了2次擾動處理=1次位運算+1次異或。

5、1.7 在put的操作時需要擴容操作,先擴容後put 在1.8版本中剛好相反

hashmap和hashtable?

1、hashmap的鍵值都允許為null hashtable不允許

2、hashmap的初始容量大小為16 hashtable的初始容量為11

3、擴容:hashmap的擴容原陣列長度2 hashtable的擴容原陣列長度2+1

4、hashmap執行緒不安全 hashtable執行緒安全

5、hashmap效率高於hashtable

6、計算hash值的方式不同

擴充套件

hash是一種雜湊演算法,根據輸入的值計算出一組雜湊值

同一雜湊函式 雜湊值如果不同,輸入值一定不相同

同一雜湊函式 如果雜湊值相同,輸入值不一定相同

集中常見的hash函式

1、直接定址法:直接以key+常數作為hash位址

2、除留餘數法:key除以不大於hash表長度的值,將餘數作為雜湊位址

3、數字分析法:提取key中的數字作為雜湊位址

4、隨機數法:將隨機數作為雜湊位址

hash碰撞:

兩個不同的值 通過同一雜湊函式 得到的位址相同稱之為hash碰撞

解決hash碰撞的集中方法:

1、開放定址法:一旦發生衝突,就會去尋找下乙個雜湊位址值

2、鏈位址法:陣列加鍊表結構,都發生碰撞時,會將發生碰撞的輸入值,鏈結到該陣列對應元素的下方

3、再雜湊法:當發生hash碰撞時,使用另外的hash函式進行計算hash位址,直到不產生衝突為止。

4、建立溢位區:將hash表分為基礎表和溢位表 發生hash碰撞的元素放入溢位表中。

hashmap的資料結構 就是使用的是 陣列+鍊錶的方式。

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