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++;
    }    

 

posted @ 2016-12-09 14:11  冰镇矿泉水  阅读(4289)  评论(0编辑  收藏  举报