LinkedList原始碼分析

2021-10-10 02:00:45 字數 1914 閱讀 8894

一、建立乙個 linkedlist 的物件

linkedlist list =

newlinkedlist()

;

當例項化 linkedlist 時,構造器什麼也沒做。

public

linkedlist()

二、新增乙個元素
linkedlist list =

newlinkedlist()

;...

// 可能新增很多個元素了

list.

add(

newobject()

);

看一下原始碼

public

boolean

add(e e)

分析這個 linklast(),看看它裡面做了什麼

void

linklast

(e e)

private

static

class

node

}

三、移除乙個元素
arraylist list =

newarraylist()

;...

// 可能新增很多個元素了

list.

add(

newobject()

);list.

remove

(int index)

;

快樂原始碼,gogogo!

public e remove

(int index)

private

void

checkelementindex

(int index)

private

boolean

iselementindex

(int index)

接下來分析這個 unlink(),在分析它之前,我們先分析一下這個 unlink() 裡面的 node()

// 返回指定索引處的節點

node

node

(int index)

else

}

接下來該到 unlink() 了

e unlink

(node

x)else

if(next == null)

else

x.item = null;

size--

;// 元素個數 - 1

modcount++

;// 修改次數 + 1

return element;

}

痛快吧,over 了

四、插入乙個元素

原始碼走起

public

void

add(

int index, e element)

看一下這個 checkpositionindex(),我都不想看了,裡面邏輯和之前那個差不多的

private

void

checkpositionindex

(int index)

private

boolean

ispositionindex

(int index)

接下來分析 linkbefore() 這個方法,裡面做的事情也很簡單

void

linkbefore

(e e, node

succ)

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