首页 > 其他 > 详细

集合之LinkedList(含JDK1.8源码分析)

时间:2019-02-11 11:45:42      阅读:154      评论:0      收藏:0      [点我收藏+]

LinkedList的数据结构

LinkedList的增删改查

增:add

  说明:add函数用于向LinkedList中添加一个元素,并且添加到链表尾部。具体添加到尾部的逻辑是由linkLast函数完成的。

举例:

public class Test {
    public static void main(String[] args) {
        List<String> list = new LinkedList<>();
        list.add("zhangsan");
        list.add("lisi");
        list.add("wangwu");
     
list.add("zhangsan");
     System.out.println(list);
  }
}

结果:

[zhangsan, lisi, wangwu, zhangsan]

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

LinkLast方法如下:

/**
     * Links e as last element.
     */
    void linkLast(E e) {
        //将last节点保存
        final Node<E> l = last;
        //构造新节点
        final Node<E> newNode = new Node<>(l, e, null);
        //将新构造的节点赋值给last节点,便于下次添加元素时使用
        last = newNode;
        //判断保存的last节点是否为null
        if (l == null)
            //为null,首次添加,first节点与last节点一样,都是新节点
            first = newNode;
        else
            //不为null,说明list中已有元素,将newNode赋值给未添加元素e之前,list中已经存在的last节点的next属性
            l.next = newNode;
        //size加1
        size++;
        //结构性修改加1
        modCount++;
    }

图示说明添加元素后链表状态的改变:

list.add("zhangsan");

技术分享图片

技术分享图片

list.add("lisi");

技术分享图片

list.add("wangwu");

技术分享图片

由此可见,双向链表的含义即:由上一个节点的next属性可以得到下一个节点,下一个节点的prev属性可以得到上一个节点。上下两个节点之间互相指向关联。

集合之LinkedList(含JDK1.8源码分析)

原文:https://www.cnblogs.com/zfyang2429/p/10361250.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!