赞
踩
Deque 是 Double ended queue (双端队列) 的缩写。
Deque 继承自 Queue,直接实现了它的有 LinkedList, ArayDeque, ConcurrentLinkedDeque 等。
Deque 支持容量受限的双端队列,也支持大小不固定的。一般双端队列大小不确定。
Deque 接口定义了一些从头部和尾部访问元素的方法。比如分别在头部、尾部进行插入、删除、获取元素。和 Queue
Deque 继承了 Queue 接口的方法。当 Deque 当做 队列使用时(FIFO),添加元素是添加到队尾,删除时删除的是头部元素。
从 Queue 接口继承的方法对应容器的方法如图所示:
Deque 也能当栈用(后进先出)。这时入栈、出栈元素都是在 双端队列的头部 进行。Deque 中和栈对应的方法如图所示:
Deque 的 12 种方法总结如下:
插入:
如果操作失败则抛出异常
void addFirst(Object e)
void addLast(Object e)
如果操作失败则返回一个特殊值(null 或 false)
boolean offerFirst(Object e)
boolean offerLast(Object e);
删除:
如果操作失败则抛出异常
Object removeFirst()
Object removeLast()
如果操作失败则返回一个特殊值(null 或 false)
Object pollFirst()
Object pollLast()
获取:
如果操作失败则抛出异常
Object getFirst()
Object getLast()
如果操作失败则返回一个特殊值(null 或 false)
Object peekFirst()
Object peekLast()
ArrayDeque 和 LinkedList 类是 Deque 接口的两个实现类:
ArrayDeque 类由数组支持。适合当作堆栈使用。
LinkedList 类由链表支持。适合当作FIFO队列使用。
import java.util.Deque; import java.util.LinkedList; public class Main { public static void main(String[] args) { Deque<String> deque = new LinkedList<String>(); deque.add("d"); deque.add("e"); deque.add("f"); //从队首取出元素,不会删除 System.out.println("队首取出元素:"+deque.peek()); System.out.println("队列为:"+deque); //从队首加入元素(队列有容量限制时用,无则用addFirst) deque.offerFirst("c"); System.out.println("队首加入元素后为:"+deque); //从队尾加入元素(队列有容量限制时用,无则用addLast) deque.offerLast("g"); System.out.println("队尾加入元素后为:"+deque); //队尾加入元素 deque.offer("h"); System.out.println("队尾加入元素后为:"+deque); //获取并移除队列第一个元素,pollFirst()也是,区别在于队列为空时,removeFirst会抛出NoSuchElementException异常,后者返回null deque.removeFirst(); System.out.println("获取并移除队列第一个元素后为:"+deque); //获取并移除队列第一个元素,此方法与pollLast()唯一区别在于队列为空时,removeLast会抛出NoSuchElementException异常,后者返回null deque.removeLast(); System.out.println("获取并移除队列最后一个元素后为:"+deque); //获取队列第一个元素.此方法与 peekFirst 唯一的不同在于:如果此双端队列为空,它将抛出NoSuchElementException,后者返回null System.out.println("获取队列第一个元素为:"+deque.getFirst()); System.out.println("获取队列第一个元素后为:"+deque); //获取队列最后一个元素.此方法与 peekLast 唯一的不同在于:如果此双端队列为空,它将抛出NoSuchElementException,后者返回null System.out.println("获取队列最后一个元素为:"+deque.getLast()); System.out.println("获取队列第一个元素后为:"+deque); //循环获取元素并在队列移除元素 while(deque.size()>0){ System.out.println("获取元素为:"+ deque.pop()+" 并删除"); } System.out.println("队列为:"+deque); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。