LinkedList源码解析

LinkedList是使用双向链表实现的。

LinkedList有一个内部类存储链表上的每一个结点(Node)的信息。

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

LinkedList有两个Node属性,存储头尾结点。新建集合时,头尾结点都为null.

transient int size = 0; //集合的大小
transient Node<E> first; //头结点
transient Node<E> last; //尾结点

LinkedList添加元素方法

添加方法默认的是向集合的尾部添加元素。


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

    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 @ 2020-10-08 12:27  雨中遐想  阅读(95)  评论(0编辑  收藏  举报