/** * 在此列表的开头插入指定的元素。 * * @param e the element to add */ publicvoidaddFirst(E e){ linkFirst(e); }
1 2 3 4 5 6 7 8 9 10 11 12 13 14
/** * Links e as first element. */ privatevoidlinkFirst(E e){ final Node<E> f = first; final Node<E> newNode = new Node<>(null, e, f); first = newNode; if (f == null) last = newNode; else f.prev = newNode; size++; modCount++; }
/** * 从该列表表示的堆栈中弹出一个元素。换句话说,删除并返回此列表的第一个元素。 此方法等效于removeFirst() */ public E pop(){ return removeFirst(); }
1 2 3 4 5 6 7 8 9 10
/** * 从此列表中删除并返回第一个元素。 */ public E removeFirst(){ final Node<E> f = first; if (f == null) thrownew NoSuchElementException(); return unlinkFirst(f); }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/** * Unlinks non-null first node f. */ 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; if (next == null) last = null; else next.prev = null; size--; modCount++; return element; }