1.特色node
LinkedList的底層實現是由一個雙向鏈表實現的,能夠從兩端做爲頭節點遍歷鏈表。安全
容許元素爲null數據結構
線程不安全this
增刪相對ArrayList快,改查相對ArrayList慢(curd都會根據index找到Node,折半查找來提升效率)spa
底層鏈表實現,沒有擴容一說線程
2.鏈表節點code
靜態內部類blog
private static class Node<E> { E item;//元素值 Node<E> next;//後置節點 Node<E> prev;//前置節點 Node(Node<E> prev, E element, Node<E> next) { this.item = element; this.next = next; this.prev = prev; } }
3.方法接口
add和remove系列的方法,涉及到節點指向的問題,由於是雙向鏈表,因此除了肯定元素以外,還須要重置前置節點和後置節點element
1.前置節點和後置節點爲null是分別判斷
2.remove,元素的前置節點的next指向當前元素的next;當前元素的後置節點的prev指向當前元素的的prev;置空當前元素一節當前元素的節點指向,等待gc
3.add默認尾部追加
4.addAll中定義的中間節點變量,和插入位置的後一個節點 Node<E> pred, succ; ,在for循環中使用 pred = newNode; 步進指向插入的最後一個元素,modCount++;
get和set方法,都要先獲取節點(經過位移運算折半查找,提高查詢效率)
Node<E> node(int index)
ArrayList和LinkedList都有一個內部類ListItr,實現了ListIterator接口
能夠使用listIterator進行迭代循環
LinkedList比較簡單主要是數據結構雙向列表的指向問題,畫圖很好理解