HashMap中關於陣列和連結串列的一些認識
阿新 • • 發佈:2019-01-26
HashMap底層是通過順序表(陣列)+ 連結串列實現的,陣列中存放的是物件
(1)陣列部分進行的操作主要是雜湊,根據hash演算法進行雜湊,實現快速儲存第一步,確定儲存在陣列的哪個位置。
hash演算法的思路:陣列範圍內的最大質數;程式碼實現:
hashCode=hashCode^((hashCode>>>20)^(hashCode>>>12));
return hashCode^((hashCode>>>7)^(hashCode>>>4));每一個單位中儲存的內容為:key+value+指標,其中指標主要用來進行連結串列操作。
這就涉及到一個問題,由於陣列容量改變,因此需要重新對所有已雜湊元素重新雜湊。
因此,在已知HashMap容量的前提下,最好設定HashMap初始大小,防止多次雜湊。
(2)連結串列存在主要是為了解決經過hash計算後會有重複值這一問題。
當多次雜湊後,hash計算結果值一致,需要存放在陣列的同一部分,就要使用連結串列結構。
當一個非空陣列中需要存入新的物件,就需要把原來物件中末尾的指標指向新的物件,每次有新的物件key值經過hash計算後得到相同的值,都會重複以上步驟,“往下塞”,使每個物件都能夠被訪問到。