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