在 Java 中当我们需要使用队列和栈这两种数据结构时,我们通常并不使用Queue,Stack,而是选择 Deque 进行实现这两种数据结构。在使用Deque时,重要的一点就是明确数据操作, 是 先进后出 FILO(即栈,只在一端进行操作,不能误用API),还是 先进先出 FIFO (即队列,在两端操作,但要注意API组合的一致性)。
Deque
java.util.Deque 接口
其父接口有
Collection;
Iterable;
Queue;
实现类有
ArrayDeque;
LinkedList;
ConcurrentLinkedDeque;
LinkedBolckingDeque;
Deque API
Deque提供了两套API
一套是出错抛出异常
// head
addFirst();
removeFrist();
getFirst();
// tail
addLast();
removeLast();
getLast();
一套是出错返回特殊值
// head
offerFirst();
pollFirst();
peekFirst();
// tail
offerLast();
pollLast();
peekLast();
Deque 支持在两端插入和去除元素的线性集合,因此可以实现栈、也可以实现队列
Deque 实现 queue
由于Deque也继承了Queue接口
对于实现Queue时,有两套等价的API
一套是Queue自己的,Deque继承过来的
add(e);
offer(e);
remove();
poll();
element(); // 检索
peek();
一个是Deque的【语意明确,推荐使用】
addLast();
offerLast();
removeFirst();
pollFirst();
getFirst();
peekFirst();
Deque 实现 stack
Deque也可以实现stack,后进先出
Stack中的操作对应的在Deque中的实现
push(); ----> addFirst();
pop(); ----> removeFirst();
peek(); ----> peekFirst();