1. 程式人生 > >HashMap實現原理,利用陣列和連結串列儲存元素

HashMap實現原理,利用陣列和連結串列儲存元素

陣列:儲存區間連續,佔用記憶體嚴重,定址容易,插入刪除困難

連結串列:儲存區間離散,佔用記憶體比較寬鬆,定址困難,插入刪除容易

hashmap綜合應用了這兩種資料結構,實現了定址容易,插入刪除也容易

HashMap結構示意圖:


實現原理:用一個數組來儲存元素,但是這個陣列儲存的不是基本資料型別。HashMap實現巧妙的地方就在這裡,陣列儲存的元素是一個Entry類,這個類有三個資料域,key、value(鍵值對),next(指向下一個Entry)

那HashMap是怎麼確定插入一個值的時候怎麼確定該把這個元素插入這個陣列的哪個位置呢?

實際上是通過這個演算法實現的:key.hashCode()%Array[].length    位置下標由key的雜湊值對陣列的長度取模得到

說到這裡,又有一個問題了,如果兩個key經過計算後得到相同的陣列下標怎麼辦?

這裡用到的就是一個連結串列,hashmap在插入元素的時候,會首先檢查這個位置上有沒有元素,如果已經有了元素,那麼就把這個新插入的Entry的next指向本來這個位置上的元素的地址,然後再插入這個位置,這也就是為什麼插入多個相同的key的value時,這個位置的value始終是最後插入的那個元素的值。