jdk源码阅读笔记之java集合框架(四)(LinkedList)

关于LinkedList的分析,会从且仅从其添加(add)方法入手。

因为上一篇已经分析过ArrayList,相似的地方就不再叙述,关注点在LinkedList的特点。

属性:

   /**
     *链表头
     */
    transient Node<E> first;

    /**
     * 链表尾
     */
    transient Node<E> last;
View Code

从以上两个属性可以得出LinkedList是基于双向链表实现的。

节点代码(无需过多解释):

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

LinkedList的add方法:

LinkedList中有多个add方法,大同小异,遂选取其一进行分析。

/**
     * 插入指定元素到list尾部
     */
    public boolean add(E e) {
        linkLast(e);
        return true;
    }
    /**
     * 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 @ 2017-05-13 09:08  蒋旺93  阅读(165)  评论(0编辑  收藏  举报