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