4.7 Deque接口
Deque是一种双端队列,支持在两个端点处插入和移除元素。Deque接口是比Stack和Queue更丰富的抽象数据类型,因为它同时实现堆栈和队列。Deque接口定义了访问Deque实例两端元素的方法,提供了插入、移除和检查元素的方法,ArrayDeque和LinkedList等预定义类都实现了Deque接口。
需要注意的是,Deque接口既可以用作后进先出堆栈,也可以用作先进先出队列。Deque接口中给出的方法分为以下3个部分。
4.7.1 插入
addFirst和offerFirst方法在Deque实例的开头插入元素,方法addLast和offerLast在Deque实例的末尾插入元素。当Deque实例的容量受到限制时,首选方法是offerFirst和offerLast,因为如果队列已满,那么addFirst可能无法抛出异常。
4.7.2 移除
removeFirst和pollFirst方法从Deque实例的开头删除元素,removeLast和pollLast方法从末尾删除元素。如果Deque为空,那么方法pollFirst和pollLast返回null,方法removeFirst和removeLast则会抛出异常。
4.7.3 检索
方法getFirst和peekFirst检索Deque实例的第一个元素,这些方法不会从Deque实例中删除该值。同样,方法getLast和peekLast检索最后一个元素。如果Deque实例为空,则方法getFirst和getLast会抛出异常,而方法peekFirst和peekLast将返回null。
表4-3列出12种Deque元素的插入、移除和检索方法。
表4-3 12种Deque元素的插入、移除和检索方法
除了插入、删除和检查Deque实例的这些基本方法之外,Deque接口还有一些预定义的方法。例如,removeFirstOccurence,如果Deque实例中存在指定元素,那么方法将删除第一个出现的指定元素;如果元素不存在,则Deque实例保持不变。另一种类似的方法是removeLastOccurence,此方法删除Deque实例中最后一次出现的指定元素,这些方法的返回类型都是boolean,如果元素存在于Deque实例中则将返回true。