LinkedList 底層分析

2021-09-14 01:15:26 字數 513 閱讀 7743

如圖所示linkedlist底層是基於雙向鍊錶實現的,也是實現了list介面,所以也擁有 list 的一些特點(jdk1.7/8 之後取消了迴圈,修改為雙向鍊錶)。

public boolean add(e e) 

/*** links e as last element.

*/void linklast(e e)

可見每次插入都是移動指標,和 arraylist 的拷貝陣列來說效率要高上不少。

public e get(int index) 

nodenode(int index) else

}

上述**,利用了雙向鍊錶的特性,如果index離煉表頭比較近,就從節點頭部遍歷。否則就從節點尾部開始遍歷。使用空間(雙向鍊錶)來換取時間。

這樣的效率是非常低的,特別是當 index 越接近 size 的中間值時。

總結:

LinkedList底層原理

首先 linkedlist 是雙向列表。用於記錄集合的數量 transient intsize 0 集合的第一項 transient nodefirst 集合的最後一項 transient nodelast linkedlist類中有乙個內部私有類node,這個類就代表雙端鍊錶的節點node。這個類...

LinkedList的底層實現

先看個結構圖 我們知道linkedlist的底層是使用鍊錶實現的,我們來看下原始碼 鍊錶的長度 transient int size 0 鍊錶的頭 pointer to first node.invariant first null last null first.prev null first.i...

LinkedList 原始碼分析

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