LinkedList
简介
LinkedList是使用双向链表实现的集合(jdk1.7之前使用循环链表),由于LinkedList实现了Deque(Deque继承了Queue)接口,所以LinkedList也可以当作堆栈、双端队列或者队列使用。
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
优点
由于LinkedList底层是用双向链表实现的,相对使用数组实现的ArrayList,它的插入、删除元素的效率要比ArrayList高,适合多写的情况下使用。
插入数据
节点类
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;
}
}
成员变量
transient Node<E> first; //头节点
transient Node<E> last; //尾节点
增添元素
向LinkedList集合中插入一个元素,执行linkLast方法,将该元素插入链表尾部
public boolean add(E e) {
linkLast(e);
return true;
}
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++;
}
- 插入第一个数据 e1,此时 first、last 均为 null,即 l == null,创建新节点后,last 和 first 都指向该节点
- 第二个数据e2,此时 l 指向节点1,随后创建节点2,存放数据e2,再将last指向节点2;又因为此时 l != null,l == node1,所以节点1的下一个节点指针指向节点2,即node1.next = node2,完成插入操作,如下图所示
- 后续插入重复步骤2
结语
以上是我对LinkedList的学习认知,如有错误,请指正。