原始碼版本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提供乙個特殊的建構函式,實現了每次迭代返回最...