二 LinkedList原始碼分析

2021-07-24 13:32:46 字數 2393 閱讀 6024

二、linkedlist原始碼分析

上篇看了下arraylist原始碼,這篇記錄下linkedlist原始碼分析

linkedlist 繼承 abstractsequentiallist 提供了對元素順序訪問的抽象

linkedlist 實現 deque介面,底層構成雙向鍊錶結構

linkedlist 實現 cloneable 可以轉殖

linkedlist 實現了serializable介面,可以進行序列化和反序列化操作,可以在網路上進行傳輸和儲存

linkedlist底層採用雙向列表的形式儲存

linkedlist 成員變數

//指向鍊錶第乙個節點

transient nodefirst;

//指向鍊錶最後乙個節點

transient nodelast;

linkedlist 建構函式

public

linkedlist()

public

linkedlist(collection<? extends e> c)

向linkedlist 增加元素

public

boolean

add(e e)

//直接在鍊錶後插入

void linklast(e e)

//節點內部類

private

static

class

node }

//在列表開始位置插入

public

void

addfirst(e e)

private

void

linkfirst(e e)

//在固定位置插入元素

public

void

add(int index, e element)

//獲取指定位置的元素

nodenode(int index) else

}//將新元素插入到指定位置的前面

void linkbefore(e e, nodesucc)

//在指定位置插入集合

public

boolean

addall(int index, collection<? extends e> c) else

for (object o : a)

//如果succ則將加入集合的最後乙個元素作為新鍊錶的最後乙個節點,或者succ就是集合的最後乙個元素的後繼節點,succ前驅節點就是集合的最後乙個元素

if (succ == null) else

size += numnew;

modcount++;

return

true;

}

linkedlist 查詢元素

//獲取指定位置元素

public e get(int index)

//獲取第乙個節點

public e getfirst()

//獲取最後乙個節點

public e getlast()

//獲取第乙個節點元素

public e element()

//獲取並刪除第乙個節點元素

public e poll()

linkedlist 刪除元素 就是將他的前驅後後繼節點不指向它

//刪除第乙個節點元素

public e remove()

public e removefirst()

private e unlinkfirst(nodef)

//刪除最後乙個節點元素

public e removelast()

private e unlinklast(nodel)

//刪除指定位置的元素

public e remove(int index)

e unlink(nodex) else

if (next == null) else

x.item = null;

size--;

modcount++;

return element;

}

linkedlist 入棧和出棧

//入棧

public

void

push(e e)

//出棧

public e pop()

總結:

1.linkedlist 底層是基於雙向鍊錶實現的 元素都可以為null,所以增加元素效率很高只需要挑戰指標,但是查詢,要遍歷鍊錶元素,效率低

2.linkedlist 是執行緒不安全的

java原始碼 LinkedList 二

1.先看下內部的增刪改查方法,對外的方法都是建立在內部方法基礎上的 a.插入到頭結點之前 links e as first element.private void linkfirst e e b.加入尾節點之後 links e as last element.void linklast e e c...

LinkedList 原始碼分析

linkedlist資料結構是 雙向鍊錶 先來講下單鏈表和雙向鍊錶 雙向鍊錶 單鏈表相對於雙向鍊錶來說,結構簡單。但有乙個缺點,即在單鏈表中只能通過乙個節點的引用訪問其後續節點,無法直接訪問其前驅節點,如果在單鏈表中想找到某個幾點的前驅節點,必須遍歷鍊錶,耗費時間。因此擴充套件了單鏈表,在單鏈表結構...

LinkedList原始碼分析

資料結構 linkedlist是雙向迴圈鍊錶 1.構造方法 constructs an empty list.構造乙個空的列表 public linkedlist private transient entryheader new entry null,null,null entry e eleme...