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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/465979.html
標籤:其他
上一篇:const關鍵字:可改不可改?
