LinkedList原始碼分析

2021-10-06 21:06:23 字數 2845 閱讀 9516

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)

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

;}

addfirst(e e)
//將元素新增到集合的頭部

public

void

addfirst

(e e)

private

void

linkfirst

(e e)

add(e, e)

此方法和 addlast 方法一樣

public

boolean

add(e e)

//新增到尾節點

void

linklast

(e e)

add(int index, e element)
public

void

add(

int index, e element)

void

linkbefore

(e e, node

succ)

get(int index)
public e get

(int index)

node

node

(int index)

else

}

remove(int index)
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;

}

remove()

和 removefirst 方法一樣

public e remove()

public e removefirst()

private e unlinkfirst

(node

f)

removelast()
public e removelast()

private e unlinklast

(node

l)

set(int index, e element)
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按下標查詢元素速度快,但插入元素或者刪除元素效率低,因為都設計...