查看LinkedList源码:
1、实现栈
后进先出,插入和弹出操作都在前端,对应代码:
public void push(E e) {
addFirst(e);
}
/**
* Pops an element from the stack represented by this list. In other
* words, removes and returns the first element of this list.
*
* <p>This method is equivalent to {@link #removeFirst()}.
*
* @return the element at the front of this list (which is the top
* of the stack represented by this list)
* @throws NoSuchElementException if this list is empty
* @since 1.6
*/
public E pop() {
return removeFirst();
}
2、实现队列
先进先出,插入在前端,弹出在后端,通过一个双向指针,末尾操作,即是header.previour操作
public E poll() {
if (size==0)
return null;
return removeFirst();
}
public boolean offer(E e) {
return add(e);
}
public boolean add(E e) {
addBefore(e, header);
return true;
}
private Entry<E> addBefore(E e, Entry<E> entry) {
Entry<E> newEntry = new Entry<E>(e, entry, entry.previous);
newEntry.previous.next = newEntry;
newEntry.next.previous = newEntry;
size++;
modCount++;
return newEntry;
}