LinkedHashMap簡單解析

2021-08-06 04:32:21 字數 876 閱讀 9691

原始碼版本1.7

本文參考:

1、內部結構

節點的結構:

整體結構:

插入過程:

1、從table的角度看,新的entry需要插入到對應的bucket裡,當有雜湊衝突時,採用頭插法將新的entry插入到衝突鍊錶的頭部。

2、從header的角度看,新的entry需要插入到雙向鍊錶的尾部。

刪除過程:

1、從table的角度看,需要將該entry從對應的bucket裡刪除,如果對應的衝突鍊錶不空,需要修改衝突鍊錶的相應引用。

2、從header的角度來看,需要將該entry從雙向鍊錶中刪除,同時修改鍊錶中前面以及後面元素的相應引用。

訪問的兩種方式:

1、一種是按照插入元素時的順序迭代,比如,插入a,b,c,那麼迭代也是a,b,c,

2、另一種是按照訪問順序,比如,在迭代前,訪問了b,那麼迭代的順序就是a,c,b,比如在迭代前,訪問了b,接著又訪問了a,那麼迭代順序為c,b,a,比如,在迭代前訪問了b,接著又訪問了b,然後在訪問了a,迭代順序還是c,b,a。要說明的意思就是不是近期訪問的次數最多,就放最後面迭代,而是看迭代前被訪問的時間長短決定。

LinkedHashMap學習筆記

概述linkedhashmap資料結構相比較於hashmap來說,新增了雙向指標,分別指向前乙個節點 before和後乙個節點 after,從而將所有的節點已鍊錶的形式串聯一起來 hashmap裡面的方法在linkedhashmap進行了重寫 void afternodeaccess nodep v...

LinkedHashMap 實現總結

繼承於hashmap,定義了新的內部類entry用於實現雙向鍊錶儲存記錄的插入或訪問順序 accessorder用於指示鍊錶儲存記錄採用的順序,true為訪問順序,false為插入順序 加入新的記錄時需要更新鍊錶,訪問記錄時需要更新鍊錶 更具accessorder值判斷是否實際更新 removeel...

LinkedHashMap原始碼閱讀

linkedhashmap內部採用了雜湊表和煉表實現map介面,並可以保證迭代的順序,和hashmap不同,其內部維護乙個指向所有元素的雙向鍊錶,其決定了遍歷的順序,通常是元素插入的順序進行迭代,不過元素重新插入順序不會受到影響。linkedhashmap提供乙個特殊的建構函式,實現了每次迭代返回最...