源码介绍
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable{}
添加过程中的操作:
当创建LinkedList类时,会调用其空参构造方法,将其参数进行初始化,里面有:
transient int size = 0;//实际集合大小
/**
* Pointer to first node.
*/
transient Node<E> first;//指向第一个元素
/**
* Pointer to last node.
*/
transient Node<E> last;//指向最后一个元素
当我们进添加元素的时候,此时会调用我们的linkedLast方法,然后将我们要添加的元素放入一个Node内部类中进行封装,如下:
private static class Node<E> {
E item;//我们的具体数据
Node<E> next;//指向下一个节点
Node<E> prev;//指向前一个节点
//linkedLast方法中会调用我们这个满参构造
Node(Node<E> prev, E element, Node<E> next) {
this.item = element;
this.next = next;
this.prev = prev;
}
}
在调用linkedLast方法:
void linkLast(E e) {
final Node<E> l = last;//首先获取我们的外部类中的成员last即为linkedList指向最后一个元素的成员变量
final Node<E> newNode = new Node<>(l, e, null);//传入头节点、数据、尾节点
last = newNode;//由于是插入数据,所以直接last指向新节点
if (l == null)
first = newNode;//如果last是空,则说明此时是第一个节点
else
l.next = newNode;//否则则让原先的last节点指向我们新插入的节点
size++;//长度跟着变化
modCount++;//记录修改次数
}