LinkedList 是如何完成添加的?

导读:本篇文章讲解 LinkedList 是如何完成添加的?,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

问题描述:

1,LinkedList 进行初始化的时候

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

2,add 方法

    /**
     * Appends the specified element to the end of this list.
     *
     * <p>This method is equivalent to {@link #addLast}.
     *
     * @param e element to be appended to this list
     * @return {@code true} (as specified by {@link Collection#add})
     */
    public boolean add(E e) {
        linkLast(e);
        return true;
    }

3,往linkLast(e);方法下追,当前就是添加的核心方法

    /**
     * Links e as last element.
     */
    void linkLast(E e) {
    	/*
    	* 第一次添加的时候,last 是当前定义的一个Node<E>对象变量
    	* //transient Node<E> last;
    	*/
        final Node<E> l = last;
        /*
        * 在我们创建一个新的Node对象的时候,Node构造方法中
    	* 第一个值:prev 指向上一个对象
    	* 第二个值:item 当前添加的元素
    	* 第三个值:next 指向下一个对象
        */
        final Node<E> newNode = new Node<>(l, e, null);
        // 创建完成后 赋值给当前 last
        last = newNode;
        // 判断l是否等于null,可见l就是last赋值的,在第一次添加的时候
        // last就是null 所以l的变量就是null
        if (l == null) // 满足条件
            first = newNode;// 赋值给first
        else
            l.next = newNode;
        size++;// 索引加加
        modCount++; // 修改次数加加
    }

4,第一次添加结果出来就是这样的

在这里插入图片描述
5,当进行第二次添加的时候

    /**
     * Links e as last element.
     */
    void linkLast(E e) {
    	/*
    	* 第二次添加的时候,last 就是之前上一个Node对象
    	*/
        final Node<E> l = last;
        /*
        * 在我们创建一个新的Node对象的时候,Node构造方法中
    	* 第一个值:prev 指向上一个对象,所以说,我们创建第二个对象时
    	* 当前这个prev就会指向上一个
    	* 第二个值:item 当前添加的元素
    	* 第三个值:next 指向下一个对象
        */
        final Node<E> newNode = new Node<>(l, e, null);
        // 创建完成后 赋值给当前 last 最后一个
        last = newNode;
        // 判断l是否等于null,此时l等于上一个Node对象
        // l不等于null
        if (l == null) // 不满足条件
            first = newNode;
        else
        	// 让上一个Node的next指向当前新创建的节点
            l.next = newNode;
        size++;// 索引加加
        modCount++; // 修改次数加加
    }

6,第二次添加出来的示意图
在这里插入图片描述
7,由此内推,每次添加一个新的节点的时候,节点都是往后追加的,新的节点的prev会指向上一个节点,而上一个节点则会指向一个当前这个新的节点

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/112581.html

(0)
Java光头强的头像Java光头强

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!