答案:
2個put會同時擴容造成死迴圈(鍊錶有環)
可能有2個同時put,導致1個丟失,被後面的put覆蓋了。一種情況是2個執行緒,1存1取,a剛存完key1value1,還沒等b取值,a又存完key1value2,這樣b取值只能取得key1value2,key1value1就丟失了
答案:當hashmap中的元素個數超過陣列長度*0.75的時候會進行擴容,並且都是按照2的倍數進行擴容,擴容的過程是有效能消耗的,因為原陣列中資料必須重新計算其在新陣列中的位置,並放進去,關於怎麼計算陣列中的位置,這裡有個核心hash演算法,hash演算法的原則就是盡量在hsahmap的陣列上均勻分布,減少碰撞,避免形成鍊錶,節省查詢元素的時間。 這個演算法是根據 hashcode & (陣列長度 - 1) 算得key得hashcode值,然後跟陣列的長度-1做一次「與」運算(&),這裡注意,陣列長度只有是2的倍數的時候,不同的key計算出的index相同的機率較小,資料在陣列上的分布就比較均勻,減少碰撞,提公升查詢效率。
hashmap知識點小結
1.hashmap是基於hash表的map介面實現 2.hashmap底層採用的是entry陣列和鍊錶實現的 3.hashmap採用鍵值隊 key,value 結構,其中 key不可重複,可以為null,value的值可以重複。4.hashmap為執行緒不安全,無synchronized修飾 5.h...
hashMap關鍵知識點
1 資料結構 jdk1.7是陣列加鍊表,jdk1.8是陣列加鍊表加紅黑樹 鍊錶太長了查詢也慢,所以鍊錶長度超過8時就使用紅黑樹咯 2 hashmap的初始化大小 1 不給長度時,預設初始化為16,建立map時盡量給個長度,防止不斷擴容影響效率。2 大小為2的n次冪時,雜湊得比較均勻,那麼查詢就比較快...
HashMap知識點和紅黑樹知識點
hashmap知識點 初始容量 16 裝載因子 0.75 預設限制擴容數 64 轉換紅黑樹閾值 8 轉換鍊錶閾值 6 當鍊表長度大於8 鍊錶轉為紅黑樹 前提是hashmap容量達到64 當紅黑樹中的元素個數小於6 再轉回鍊錶 前提是根節點或者子節點為空 其實不準確 2.1 大於8,是先考慮table...