双端队列(Deque)
双端队列是指允许两端都可以进行入队和出队操作的队列,其元素的逻辑结构仍是线性结构。将队列的两端分别称为前端和后端,两端都可以入队和出队。Deque继承自Queue接口,Deque的实现类是LinkedList、ArrayDeque、LinkedBlockingDeque,其中LinkedList是最常用的。
常用方法
简单实现
import java.util.Deque; import java.util.LinkedList; public class MyDeque { public static void main(String[] args) { Deque<Integer> deque = new LinkedList<Integer>(); deque.add(1); deque.add(2); deque.add(3); //查看队首元素 System.out.println("队首元素:"+deque.peek()); System.out.println("队列:"+deque); //从队首加元素(队列有容量限制时用,无则用addFirst) deque.offerFirst(4); System.out.println("队首加入元素后:"+deque); //从队尾加入元素(队列有容量限制时用,无则用addLast) deque.offerLast(5); System.out.println("队尾加入元素后:"+deque); //offer()默认从队尾加入元素 deque.offer(6); System.out.println("队尾加入元素后:"+deque); //移除并返回队首第一个元素,队列为空时,会抛出NoSuchElementException异常 deque.removeFirst(); System.out.println("移除队首第一个元素后:"+deque); //移除并返回队尾第一个元素,队列为空时,会抛出NoSuchElementException异常 deque.removeLast(); System.out.println("移除队尾第一个元素后:"+deque); //移除并返回队首第一个元素,队列为空时,返回null deque.pollFirst(); System.out.println("移除队首第一个元素后:"+deque); //移除并返回队尾第一个元素,队列为空时,返回null deque.pollLast(); System.out.println("移除队尾第一个元素后:"+deque); //获取不移除队首第一个元素.队列为空时,抛出NoSuchElementException System.out.println("队首第一个元素:"+deque.getFirst()); System.out.println("获取队首第一个元素后:"+deque); //获取不移除队尾第一个元素.队列为空时,抛出NoSuchElementException System.out.println("队尾第一个元素:"+deque.getLast()); System.out.println("获取队尾第一个元素后:"+deque); //获取不移除队首第一个元素.队列为空时,返回null System.out.println("队首第一个元素:"+deque.peekFirst()); System.out.println("获取队首第一个元素后:"+deque); //获取不移除队尾第一个元素.队列为空时,返回null System.out.println("队尾第一个元素:"+deque.peekLast()); System.out.println("获取队尾第一个元素后:"+deque); //循环获取元素并在队列移除元素 while(deque.size()>0){ System.out.println("获取元素为:"+ deque.pop()+" 并删除"); } System.out.println("队列为:"+deque); } }