LinkedList底層實現,及其數據結構實現。


LinkedList底層的實現基於雙向表

prev data next

 

next指向下一個node的地址。prev指向上一個node。

 

這里的代碼是LinkedList類的源碼。

 private static class Node<E> {
    //業務數據 E item;
    //指向下個node Node
<E> next;
    //指向上個node Node
<E> prev; Node(Node<E> prev, E element, Node<E> next) { this.item = element; this.next = next; this.prev = prev; } }

 

那么當我們是用list.add(e);方法時會添加到這個鏈表的末位

public boolean add(E e) {
        linkLast(e);
        return true;
    }

 那么鏈表的首尾node的prev和next,看實現代碼

也就是說,firstnode的prev和lastNode的next為null

private void linkFirst(E e) {
        //這里首先獲得firstNode
        final Node<E> f = first;
        //這里的新的Node
        final Node<E> newNode = new Node<>(null, e, f);
        //此node成為新的firstNode
        first = newNode;
        //如果原來firstNode為空的話,說明這個list為空,那么這時FirstNode也就是lastNode,這個鏈表只有一個node
        if (f == null)
            last = newNode;
        else
            f.prev = newNode;
        size++;
        modCount++;
    }

    /**
     * Links e as last element.代碼解釋如上。
     */
    void linkLast(E e) {
        final Node<E> l = last;
        final Node<E> newNode = new Node<>(l, e, null);
        last = newNode;
        if (l == null)
            first = newNode;
        else
            l.next = newNode;
        size++;
        modCount++;
    }    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM