- LinkedList采用双向链表、双端队列实现,线程不安全
- 举例说明
public class test {
public static void main(String[] args) {
//构造LinkedList对象
LinkedList list = new LinkedList();
for (int i=0 ;i < 10;i++){
//添加数据
list.add(i);
}
System.out.println(list);
}
}
- LinkedList list =newLinkedList();

2. list.add(i);
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
{
//添加元素
public boolean add(E e) {
//看这
linkLast(e);
return true;
}
}
3. linkLast(e);
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
{
void linkLast(E e) {
//得到尾节点,此时为空
final Node<E> l = last;
//实例化一个新的节点,存储要添加的数据。此时,pre和next都为null
final Node<E> newNode = new Node<>(l, e, null);
//尾节点指向这个新创建的节点
last = newNode;
//如果l为null(true),头节点指向这个新创建的节点
if (l == null)
first = newNode;
else
l.next = newNode;
<span >//元素数量+1
size++;
<span >//操作数+1
modCount++;
}
}

- 删除元素
public class test {
public static void main(String[] args) {
//构造LinkedList对象
LinkedList list = new LinkedList();
for (int i=0 ;i < 2;i++){
//添加数据
list.add(i);
}
System.out.println(list);
//默认删除第一个元素
list.remove();
}
}
- list.remove();
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
{
public E remove() {
return removeFirst();
}
<span ><span >public E <span >removeFirst<span >() {
<span >//获取第一个节点
<span >final Node<E> f = first;
<span >if (f == <span >null)
<span >throw <span >new NoSuchElementException();
<span >return unlinkFirst(f);
}
<span >//删除第一个元素
<span ><span >private E <span >unlinkFirst<span >(Node<E> f) {
<span >// assert f == first && f != null;
<span >//获取第一个节点中的元素
<span >final E element = f.item;
<span >//获取第一个节点的下一个node
<span >final Node<E> next = f.next;
<span >//将第一个节点的值置空
f.item = <span >null;
<span >//将指向下一节点的指针置空
f.next = <span >null; <span >// help GC
<span >//让头节点指向下一个node
first = next;
<span >//如果下一节点不存在,置空尾节点指针。否则让下一节点的prev置空,不向前指向。
<span >if (next == <span >null)
last = <span >null;
<span >else
next.prev = <span >null;
<span >//元素数量-1
size--;
<span >//操作数+1
modCount++;
<span >//返回被删除的数据
<span >return element;
}
}

将第一个节点中的next指针、item数据置空,第二个节点pre指针置空,头节点指向下一节点
END