LinkedList底层是链表结构
public E removeFirst() {
final Node<E> f = first;
if (f == null)
throw new NoSuchElementException();
return unlinkFirst(f);
}
first指向链表中的第一个结点,那么接下来看看unlinkFirst(f)方法实现:
先看一下Node的构造,接下来会用到:
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;
}
}
item:当前结点中的数据;next:当前结点的下一个结点;prev:当前结点的前一个结点
private E unlinkFirst(Node<E> f) {
// assert f == first && f != null;
//获取当前结点的元素
final E element = f.item;
//获取当前结点的下一个结点
final Node<E> next = f.next;
f.item = null;
f.next = null; // help GC
//因为删除当前结点元素(第一个结点),所以此处将下一个结点赋值给第一个
first = next;
//判断,如果没有下一个结点,那么最后一个结点就不存在,null
if (next == null)
last = null;
else
//此处的next.prev即第一个结点,要删除,所以赋值为null
next.prev = null;
//链表大小减一
size--;
modCount++;
//将要删除的元素返回
return element;
}
如有不当之处,还望赐教!