linkedlist概述
linkedlist 與 arraylist 一樣實現 list 介面,從名字可以看出它們內部的資料結構有著不同
linkedlist 是基於鍊錶實現的,它的新增和刪除操作比arraylist佔優勢
arraylist是基於陣列實現的,隨機訪問時比linkedlist的效率更高
原始碼分析
構造方法//當前元素
transient
int size =0;
//頭節點
transient node
first;
//尾節點
transient node
last;
//node節點
private
static
class
node
}
//構建乙個空列表
public
linkedlist()
//構建乙個包含集合c的列表
public
linkedlist
(collection<
?extends
e> c)
addfirst(e e)public
boolean
addall
(collection<
?extends
e> c)
public
boolean
addall
(int index, collection<
?extends
e> c)
else
//將陣列a中的元素依次插入鍊錶
for(object o : a)
//從尾部插入的話,需要處理last指標
if(succ == null)
else
//修改數量size
size += numnew;
//修改次數
modcount++
;return
true
;}
add(e, e)//將元素新增到集合的頭部
public
void
addfirst
(e e)
private
void
linkfirst
(e e)
此方法和 addlast 方法一樣
add(int index, e element)public
boolean
add(e e)
//新增到尾節點
void
linklast
(e e)
get(int index)public
void
add(
int index, e element)
void
linkbefore
(e e, node
succ)
remove(int index)public e get
(int index)
node
node
(int index)
else
}
remove()public e remove
(int index)
e unlink
(node
x)else
//如果 next 節點為 null
//表示該節點為尾節點,將prev節點指向尾節點
if(next == null)
else
//將該節點的值置為 null
x.item = null;
//集合長度 -1
size--
;//修改次數 +1
modcount++
;//返回刪除的元素值
return element;
}
和 removefirst 方法一樣
removelast()public e remove()
public e removefirst()
private e unlinkfirst
(node
f)
set(int index, e element)public e removelast()
private e unlinklast
(node
l)
總結public e set
(int index, e element)
linkedlist是基於雙向鍊錶實現的,每乙個節點都儲存了prev節點和next節點的資訊
linkedlist根據索引獲取元素效率低,它需要乙個節點乙個節點的遍歷,而獲取首節點和尾節點很快
linkedlist實現了deque介面,具有雙向佇列的性質,可以實現資料結構中的堆疊
linkedlist底層是雙鏈表,對於插入或刪除元素來說,操作方便,效率更高
arraylist底層實現是動態陣列,查詢效率更高
arraylist原始碼分析
文中如果出現錯誤,希望小夥伴們可以諒解,更希望可以給予指正,共同進步。
LinkedList 原始碼分析
linkedlist資料結構是 雙向鍊錶 先來講下單鏈表和雙向鍊錶 雙向鍊錶 單鏈表相對於雙向鍊錶來說,結構簡單。但有乙個缺點,即在單鏈表中只能通過乙個節點的引用訪問其後續節點,無法直接訪問其前驅節點,如果在單鏈表中想找到某個幾點的前驅節點,必須遍歷鍊錶,耗費時間。因此擴充套件了單鏈表,在單鏈表結構...
LinkedList原始碼分析
資料結構 linkedlist是雙向迴圈鍊錶 1.構造方法 constructs an empty list.構造乙個空的列表 public linkedlist private transient entryheader new entry null,null,null entry e eleme...
LinkedList原始碼分析
linkedlist雖然和arraylist都實現了list介面,但兩者的底層資料結構截然不同。從類名可以看出,arraylist底層資料結構是陣列,而linkedlist底層資料結構是雙向鍊錶。兩者資料結構的優劣如下,arraylist按下標查詢元素速度快,但插入元素或者刪除元素效率低,因為都設計...