1. 程式人生 > >HashMap中關於陣列和連結串列的一些認識

HashMap中關於陣列和連結串列的一些認識

HashMap底層是通過順序表(陣列)+ 連結串列實現的,陣列中存放的是物件

(1)陣列部分進行的操作主要是雜湊,根據hash演算法進行雜湊,實現快速儲存第一步,確定儲存在陣列的哪個位置。

hash演算法的思路:陣列範圍內的最大質數;

程式碼實現:

hashCode=hashCode^((hashCode>>>20)^(hashCode>>>12));

return hashCode^((hashCode>>>7)^(hashCode>>>4));

每一個單位中儲存的內容為:key+value+指標,其中指標主要用來進行連結串列操作。

由於底層由陣列實現,因此會設定一個初始值(16)以及一個負載因子(0.75,此時如果陣列空間使用數>陣列大小的0.75時會進行擴容)。
這就涉及到一個問題,由於陣列容量改變,因此需要重新對所有已雜湊元素重新雜湊。

因此,在已知HashMap容量的前提下,最好設定HashMap初始大小,防止多次雜湊。

(2)連結串列存在主要是為了解決經過hash計算後會有重複值這一問題。
當多次雜湊後,hash計算結果值一致,需要存放在陣列的同一部分,就要使用連結串列結構。
當一個非空陣列中需要存入新的物件,就需要把原來物件中末尾的指標指向新的物件,每次有新的物件key值經過hash計算後得到相同的值,都會重複以上步驟,“往下塞”,使每個物件都能夠被訪問到。