LinkedList基於原始碼理解

2021-08-20 08:10:08 字數 1443 閱讀 4641

linkedlist 和 arraylist是最經常拿來進行比較的兩個list實現,linked一聽就知道是鍊錶,所以他的增刪均是不需要大動干戈的,使得效率很高,同樣的array標識乙個資料,查詢效率高但是增刪效率低下。

linkedlist不是執行緒安全的,他是允許元素為空的雙向鍊錶。

底層資料結構就是乙隻鍊錶

廢話不多說直接看原始碼:

transient int 

size = 0;        //集合元素數量

transient

node

first;    //煉表頭節點

transient

node

last;    //鍊錶尾節點

//無參構造器

public

linkedlist()

//有參構造器,引數是泛型,將集合元素插入鍊錶中

public

linkedlist(collection

extends

e> c)

private static class 

node }

toarray()

public 

object toarray()

add()

public boolean 

add(e e)

void 

linklast(e e)

remove()

public boolean 

remove(object

o) }

} else }}

return false;

}

e 

unlink(node

x) else

if (next == null) else

x.item = null;//否則更新 後置節點的前置節點

size--;

modcount++;

return element;//返回刪除的元素值

}

addall

public boolean 

addall(int

index, collection

extends

e> c) else

for (object o : a)

if (succ == null) else

size += numnew;

modcount++;

return true;

}

LinkedList 原始碼分析

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

LinkedList原始碼分析

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

LinkedList原始碼解析

1 實現了deque,所以是雙向鍊錶,同時可以作為雙向佇列 2 未實現randomaccess,就不能隨即訪問,對於所有的資料結構都是這樣,改介面只是起到標識作用 3 實現轉殖和序列化介面 4 鍊錶就會有節點node,雙向就會有first和last節點 5 預設建構函式什麼都沒有做,鍊錶不需要初始化...