LinkedList底層結構 說明 LinkedList底層實現了雙向鏈表和雙端隊列特點 可以添加任意元素(元素可以重覆),包括null 線程不安全,沒有實現同步 操作機制: LInkedList底層維護了一個雙向鏈表 LinkedList中維護了兩個屬性first和last分別指向首節點和尾節點 ...
LinkedList底層結構
說明
- LinkedList底層實現了雙向鏈表和雙端隊列特點
- 可以添加任意元素(元素可以重覆),包括null
- 線程不安全,沒有實現同步
操作機制:
- LInkedList底層維護了一個雙向鏈表
- LinkedList中維護了兩個屬性first和last分別指向首節點和尾節點
- 每個節點(Node對象),裡面又維護了prev、next、item(真正存放數據的地方)三個屬性,其中通過prev指向前一個,next指向後一個,最終實現雙向鏈表
- 所以LinkedList的元素的添加和刪除,不是通過數組完成的,相對來說效率較高
first:指向第一個鏈表的第一個元素
last:指向最後一個鏈表的元素
初始化
這時候LinkedList屬性 first last 都為null
執行了add方法
將新的節點加入到雙向鏈表的最後
刪除流程:
remove()方法:預設刪除的是第一個節點
判空
真正執行刪除的方法
將f指向的節點拿掉
修改方法
linkedList.set(1,999);
遍歷方式
因為LinkedList實現了List介面,遍歷方式
ArrayList和LinkedList比較
底層結構 | 增刪的效率 | 改查效率 | |
---|---|---|---|
ArrayList | 可變數據 | 較低,數組擴容 | 較高 |
LinkedList | 雙向鏈表 | 較高,通過鏈表追加 | 較低 |
如何選擇ArrayList和LinkedList:
- 如果我們改查比較多用arraylist
- 如果我們增刪操作多用LinkedList
- 一般來說在程式中,80%~90%都是查詢,因此大部分情況下會選擇ArrayList
- 在一個項目中,根據業務靈活選擇,也可能這樣,一個模塊使用的是ArrayList,另一個模塊是LinkedList