Java集合之LinkedHashMap原始碼分析

2021-09-21 14:56:04 字數 1549 閱讀 5221

hashmap是無序的, 即put的順序與遍歷順序不保證一樣.

linkedhashmap是hashmap的乙個子類, 它通過重寫父類的相關方法, 實現自己的功能. 它保留插入的順序. 如果需要輸出和輸入順序相同時, 就選用此類.

linkedhashmap是如何保證輸入輸出順序的呢?

這個鍊錶維護了乙個雙向鍊錶, 用於儲存順序.

用於指定按照什麼順序來維護鍊錶:

1.建構函式

其建構函式就是呼叫hashmap的建構函式. 在hashmap的建構函式中, 會呼叫 init() 方法(在介紹hashmap時介紹過), lindedhashmap 重寫init()方法, 在init()方法中進行相關初始化.

2.儲存

linkedhashmap並沒有重寫父類的put方法, 而是重寫了父類put方法中呼叫的其他方法來實現自己的功能, 父類put方法如下:

lindedhashmap重寫的方法如下:

3.讀取

linkedhashmap重寫了父類的get方法:

實際在呼叫父類getentry方法取得查詢的元素後, 在判斷是否記錄訪問順序. 由於鍊錶的新增、刪除操作都是常量級的, 不會帶來效能的損失.

4.排序模式

lindedhashmap定義了 boolean 型變數 accessorder, 若為true, 按照訪問順序排序, 若為false, 按照插入順序排序. 預設為 false;

其實linkedhashmap幾乎和hashmap一樣, 只是linkedhashmap定義了乙個 entry元素header, 通過header中的before,after和header結合建立乙個雙向鍊錶, 用來實現元素的順序.

Java之集合總結

1 集合 自己補齊 collection 單列集合 list 有序,可重複 arraylist 底層資料結構是陣列,查詢快,增刪慢 執行緒不安全,效率高 vector 底層資料結構是陣列,查詢快,增刪慢 執行緒安全,效率低 linkedlist 底層資料結構是鍊錶,查詢慢,增刪快 執行緒不安全,效率...

java基礎之集合

1.collectiton 單列儲存集合 list 元素是有序的,元素可以重複。因為該集合體系有索引 arraylist 底層的資料結構使用的是陣列結構 特點 陣列元素查詢很快,但是增刪很慢,因為增刪乙個元素,陣列後面的其他元素都需要變動,執行緒不同步 linklist 底層的資料結構使用的是鍊錶資...

java基礎之集合

集合的型別與各自的特性 collection 單列集合 list 有儲存順序,可重複 arraylist 陣列實現,查詢快,增刪慢由於是陣列實現,在增和刪的時候會牽扯到陣列增容,以及拷貝元素,所以慢。陣列是可以直接按索引查詢,所以查詢時較快。linkedlist 鍊錶實現,增刪快,查詢慢由於鍊錶實現...