linkedlist原始碼淺解析

2021-08-21 21:20:43 字數 2889 閱讀 1050

linkedlist底層是雙向鍊錶實現的的,他是乙個鍊錶類的資料結構 即線性結構-鍊錶,他的節點頭是不放資料的。由於是鍊錶結構的所以增刪效率比較高,隨機查詢效率慢(無法通過索引查詢儲存的值)。另外linkedlist**不是執行緒安全**的,不過可以使用list list=collections.synchronizedlist(new linkedlist(…));的方式使其變成執行緒安全的。由於linkedlist實現了queue介面,所以linkedlist不止有佇列的介面,還有棧的介面,可以使用linkedlist作為佇列和棧的實現。(可以使用在集合頭插入元素和在集合尾插入元素模擬佇列和棧的資料結構)

linkedlist的屬性解釋

transient int size = 0;//linkedlist的集合長度

transient node first; //集合的第乙個存值的節點

transient node last;//集合的最後乙個節點

node介紹是乙個雙向列表,他的屬性有三個。

private

static

class node

}

linkedlist的構造方法有兩中

第一 空參的構造方法

public

linkedlist()

第二種傳入乙個collection集合的實現類

public

linkedlist(collection extends e> c)

linkedlist的私有方法新增元素到集合頭

private

void

linkfirst(e e)

void linklast(e e)
linkedlist的預設方法linkbefore()在哪個節點前插入元素。

void linkbefore(e e, nodesucc)
linklist的私有方法,刪除集合中第乙個存值的節點

private e unlinkfirst(nodef)
linklist的私有方法,刪除集合中最後乙個節點

private e unlinklast(nodel)
linklist的預設方法,刪除集合中的乙個節點

e unlink(nodex)  else 

if (next == null) else

x.item = null

;//清空傳入節點的值,

size--;//集合長度減一

modcount++;//集合操作加一

return

element

;//返回刪除節點的值。

}

判斷集合是否存在此指定值,如果存在返回元素在集合中的角標,否則返回-1

public

int indexof(object o)

} else

}return -1;

}

上面是linkedlist的部分內建方法,下面為介紹linkedlist的常用公共方法。

public e getfirst()
public e getlast()
public e removefirst()
public e removelast()
linklist的公共方法,清除集合中所有元素

public

void

clear()

first = last = null;

size = 0;

modcount++;

}

linkedlist的迭代器

//判斷返回指定位置的節點(此方法 減少了在集合中遍歷查詢節點的次數。)

nodenode(int

index) else

}

public listiteratorlistiterator()
public listiteratorlistiterator(int

index)

//迭代器的屬性

private nodelastreturned = null;//當前節點元素

private nodenext;//下乙個節點元素

private

int nextindex;//將要獲取第幾個節點

private

int expectedmodcount = modcount;//在獲取迭代器時集合修改的次數,在多執行緒是保證獲取資料是否準確安全(不能保證執行緒安全),

listitr(int index)

迭代器常用的兩個方法

public

boolean

hasnext()

public e next()
第一寫總結,寫的比較亂,都是根據自己的理解寫的,所以寫的不好。ps(本身都是給我自己看的,能看懂的都是知己啊!!!)

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 預設建構函式什麼都沒有做,鍊錶不需要初始化...