Deque
表示双端队列。双端队列是在两端都可以进行插入和删除的队列。Deque
是一个比Stack
和Queue
功能更强大的接口,它同时实现了栈和队列的功能。ArrayDeque
和LinkeList
实现了Deque
接口。
注意:Deque
既可以用作后进先出的栈,也可以用作先进先出的队列。
Deque
接口定义如下:
public interface Deque<E> extends Queue<E> {
// *** Deque methods ***
void addFirst(E e);
void addLast(E e);
boolean offerFirst(E e);
boolean offerLast(E e);
E removeFirst();
E removeLast();
E pollFirst();
E pollLast();
E getFirst();
E getLast();
E peekFirst();
E peekLast();
boolean removeFirstOccurrence(Object o);
boolean removeLastOccurrence(Object o);
// *** Queue methods ***
boolean add(E e);
boolean offer(E e);
E remove();
E poll();
E element();
E peek();
// *** Stack methods ***
void push(E e);
E pop();
// *** Collection methods ***
boolean remove(Object o);
boolean contains(Object o);
public int size();
Iterator<E> iterator();
Iterator<E> descendingIterator();
}
双端队列方法
插入
addFirst
和offerFirst
在Deque
实例头部插入元素。
addLast
和offerLast
在Deque
实例尾部插入元素。
当Deque
实现类为有限容量时,优先使用offerFirst
和offerLast
,因为addFirst
在队列满的时候可能会插入失败而抛出异常。
删除
removeFirst
和pollFirst
从Deque
实例头部移除元素。
removeLast
和pollLast
从Deque
实例尾部移除元素。
当Deque
为空时,pollFirst
和pollLast
将会返回null
,而removeFirst
和removeLast
将会抛出异常。
检索
getFirst
和peekFirst
获取Deque
实例的第一个元素,但是不会将元素从Deque
实例中删除。类似地,getLast
和peekLast
获取最后一个元素。当Deque
为空时,getFirst
和getLast
将会抛出异常,而peekFirst
和peekLast
将会返回null
。
除了基本的插入、删除和检索方法外,还有两个预定义的方法:removeFirstOccurence
和removeLastOccurence
。这两个方法见名知意。返回true
的时候表示元素存在于队列,并且已经被删除。返回false
时表示元素不存在于队列中,并且队列没有改变。