集合之LinkedList(含JDK1.8源码分析)
Posted zfyang2429
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集合之LinkedList(含JDK1.8源码分析)相关的知识,希望对你有一定的参考价值。
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源码分析)的主要内容,如果未能解决你的问题,请参考以下文章