LinkedList原始碼詳解

2022-03-18 00:28:02 字數 1966 閱讀 5516

linklist概述

linkedlist 是 list 介面鍊錶的實現。基於雙向鍊錶實現的方式使得 linkedlist 在插入和刪除時更優於 arraylist,而隨機訪問則比 arraylist 遜色些。

但也是執行緒不安全

linklist uml類圖

linklist構造方法

//構造乙個空列表

public

linkedlist()

//構造乙個包含指定 collection 中的元素的列表,這些元素按其 collection 的迭代器返回的順序排列。

public

linkedlist(collection extends e> c)

//將此列表中指定位置的元素替換為指定的元素。 

public e get(int

index)

//查詢結點,採用的是折半查詢

nodenode(int

index) else

}

add方法

boolean add(e e),將指定元素新增到列表的結尾

public boolean add(e e) 

void linklast(e e)

private

static

class node

}

void add(int index, e element)

指定的位置插入指定的元素。移動當前在該位置處的元素(如果有),所有後續元素都向右移(在其索引中新增 1)。

public

void add(int

index, e element)

void linkbefore(e e, nodesucc)

刪除指定索引元素
public e remove(int

index)

e unlink(nodex) else

//如果當前結點的後續指標為空,說明刪除的是列表尾

if (next == null) else

//當前結點的資料置為空

x.item = null;

size--;

modcount++;

return element;

}

迭代器

因為linkedlist多重繼承了多個類,會先呼叫父類的方法,

public listiteratorlistiterator()
真正的有作用的方法是

public listiteratorlistiterator(int index) 

private

class listitr implements listiterator

public boolean hasnext()

public e next()

public boolean hasprevious()

public e previous()

public

intnextindex()

public

intpreviousindex()

public

void

remove()

//替換元素

public

void

set(e e)

//新增到當前索引的元素

public

void

add(e e)

final void checkforcomodification()

}

LinkedList原始碼詳解

說明 linkedlist底層是用雙鏈表的方式實現,比較適合add和remove操作場景較多的情況。雙鏈表結構圖 類似於自行車鏈條,一環扣一環 一 類圖 linkedlist繼承了abstractsequentiallist抽象類,實現了add remove set等功能。linkedlist繼承了...

LinkedList原始碼詳解 2

peek操作 檢視不刪除 peek peekfirst 檢視容器中的第乙個元素,但是不刪除此元素。此方法和getfisrt效果類似,但是值得注意的是如果第乙個元素為空的話getfirst會丟擲異常 public e peek public e peekfirst 2.peeklast 檢視容器最後乙...

LinkedList 原始碼分析

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