LinkedList源码分析-猿来绘Java-49

LinkedList的构造器有空参构造器的,查看源码,我们发现,在我们代码中 new LinkedList();的时候,是创建了一个空的链。

/**
 * Constructs an empty list.
 */
public LinkedList() {
}

再看下add方法:调用了linkLast方法,添加元素e到链表的尾部:

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

看下linkLast的源码:实际上是将e封装为Node放到链表的尾部。

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

那Node又是哪里的呢?再看源码,其实Node就是LinkedList的内部类。内部提供了三个参数的构造器 Node(Node<E> prev, E element, Node<E> next),在linkLast(e)时,调用了这个三个参数的构造器。

    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的操作,其实内部就是对一个双向链表的操作,如果熟悉数据结构中的双向链表的话, LinkedList的源码很容易就明白了。

Supongo que te gusta

Origin blog.csdn.net/asdfjklingok/article/details/118605950
Recomendado
Clasificación