一、建立乙個 linkedlist 的物件
linkedlist list =
newlinkedlist()
;
當例項化 linkedlist 時,構造器什麼也沒做。
public
linkedlist()
二、新增乙個元素linkedlist list =
newlinkedlist()
;...
// 可能新增很多個元素了
list.
add(
newobject()
);
看一下原始碼
public
boolean
add(e e)
分析這個 linklast(),看看它裡面做了什麼
void
linklast
(e e)
private
static
class
node
}
三、移除乙個元素arraylist list =
newarraylist()
;...
// 可能新增很多個元素了
list.
add(
newobject()
);list.
remove
(int index)
;
快樂原始碼,gogogo!
public e remove
(int index)
private
void
checkelementindex
(int index)
private
boolean
iselementindex
(int index)
接下來分析這個 unlink(),在分析它之前,我們先分析一下這個 unlink() 裡面的 node()
// 返回指定索引處的節點
node
node
(int index)
else
}
接下來該到 unlink() 了
e unlink
(node
x)else
if(next == null)
else
x.item = null;
size--
;// 元素個數 - 1
modcount++
;// 修改次數 + 1
return element;
}
痛快吧,over 了
四、插入乙個元素
原始碼走起
public
void
add(
int index, e element)
看一下這個 checkpositionindex(),我都不想看了,裡面邏輯和之前那個差不多的
private
void
checkpositionindex
(int index)
private
boolean
ispositionindex
(int index)
接下來分析 linkbefore() 這個方法,裡面做的事情也很簡單
void
linkbefore
(e e, node
succ)
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按下標查詢元素速度快,但插入元素或者刪除元素效率低,因為都設計...