HashMap實現原理,利用陣列和鍊錶儲存元素

2021-08-18 12:27:36 字數 698 閱讀 9020

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

鍊錶:儲存區間離散,占用記憶體比較寬鬆,定址困難,插入刪除容易

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

hashmap結構示意圖:

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

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

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

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

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

hashmap的實現原理 陣列 entry

hashmap在日常工作中使用場景非常多,程式設計師都知道是hashmap是執行緒非安全的,但是底層是以什麼方式儲存的?本人仔細研讀了一下原始碼,也只是掌握了核心的儲存功能,並沒有把全部 看明白,但是對於理解hashmap的儲存結構完全夠了。儲存結構 hashmap底層是以陣列方式進行儲存。將key...

HashMap實現原理

hashmap 的get 方法 呼叫get方法返回entry public v get object key getentry方法 final entrygetentry object key 對key int hash key null 0 hash key for entrye table in...

HashMap實現原理

資料結構中有陣列和鍊錶來實現對資料的儲存,但這兩者基本上是兩個極端。陣列儲存區間是連續的,占用記憶體嚴重,故空間複雜的很大。但陣列的二分查詢時間複雜度小,為o 1 陣列的特點是 定址容易,插入和刪除困難 鍊錶儲存區間離散,占用記憶體比較寬鬆,故空間複雜度很小,但時間複雜度很大,達o n 鍊錶的特點是...