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