LinkedList源碼分析筆記(jdk1.8)

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比較簡單主要是數據結構雙向列表的指向問題,畫圖很好理解

相關文章
相關標籤/搜索