LinkedList原始碼解析

2021-08-22 08:45:26 字數 1193 閱讀 1526

private

static

class node

}

新增乙個元素

核心思想:判斷是不是末尾插入,是則末尾插入否則指定位置插入

public

void add(int

index, e element)

在末尾加上乙個元素

void linklast(e e)
在指定位置加上乙個元素

void linkbefore(e e, nodesucc)
2.移除乙個元素

public e remove(int

index)

移除元素核心**

核心思想:1 獲取需要移除元素的前乙個元素prev

2 將prev的next指向需要移除元素的next元素

unlink(nodex)  else 

if (next == null) else

x.item = null;

size--;

modcount++;

return element;

}

3.list介面的遍歷需要用迭代器listiterator(),因為迭代器的效能更高。為啥更高呢?我們直接看**

迭代器會在遍歷的時候有個索引nextindex,指向當前索引位置

private

class

listitr

implements

listiterator

public

boolean hasnext()

public e next()

final

void checkforcomodification()

............

for迴圈通過get(index)取資料,每次都需要重新遍歷一遍,當list很大的時候效能就會很低。

public e get(int

index)

nodenode(int

index) else

}

LinkedList原始碼解析

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

LinkedList原始碼解析

借鑑部落格 正如上面這篇部落格所述,在1.6包括1.6之前,linkedlist都是乙個環形鍊錶結構,直到1.7包括1.7之後linkedlist變成了乙個線性鍊錶結構了。如果大家不是很懂鍊錶的結構,可以去翻看上面的這篇部落格 linkedlist和arraylist同樣提供了list和serial...

LinkedList原始碼解析

linklist 和arraylist的區別在於linklist底層是以鍊錶實現的,arraylist是與陣列資料結構存在 private static class node transient int size 0 當前鍊錶長度 transient nodefirst 鍊錶的第乙個元素 trans...