Deque是一个双端队列接口(double ended queue),继承自Queue接口,Deque的实现类是LinkedList、ArrayDeque、LinkedBlockingDeque,其中LinkedList是最常用的。

Deque有三种用途:

  • 普通队列(一端进另一端出):

    • Queue queue = new LinkedList()或Deque deque = new LinkedList()
  • 双端队列(两端都可进出)
    • Deque deque = new LinkedList()
  • 堆栈
    • Deque deque = new ArrayDeque()

注意:Java堆栈Stack类已经过时,Java官方推荐使用Deque替代Stack使用。Deque堆栈操作方法:push()、pop()、peek()。

Queue的12个方法分类:

压入元素(添加):

addFirst:在队列的前面立即加入该元素
offerFirst:在该元素的前面插入指定的元素,除非它违反容量限制。返回 boolean
addLast:在队列的后面立即加入该元素
offerLast:在该元素的后面插入指定的元素,除非它违反容量限制。返回 boolean

add()、offer()
相同:未超出容量,从队尾压入元素,返回压入的那个元素。
区别:在超出容量时,add()方法会对抛出异常,offer()返回false

弹出元素(删除):remove()、poll()

removeFirst:移除队列的第一个元素
pollFirst:移除队列的第一个元素,除非它为空。返回 boolean
removeLast:移除队列的最后个元素
pollLast:移除队列的最后个元素,除非它为空 。返回 boolean

相同:容量大于0的时候,删除并返回队头被删除的那个元素。
区别:在容量为0的时候,remove()会抛出异常,poll()返回false

getFirst:获取队列的第一个元素
peekFirst:获取队列的第一个元素。队列为空返回 null
getLast:获取队列的最后一个元素
peekLast:获取队列的第一个元素。队列为空返回 null

获取队头元素(不删除):element()、peek()
相同:容量大于0的时候,都返回队头元素。但是不删除。
区别:容量为0的时候,element()会抛出异常,peek()返回null。

做下小整理:

  第一个元素 (头部) 最后一个元素 (尾部)
  抛出异常 特殊值 抛出异常 特殊值
插入 addFirst(e) offerFirst(e) addLast(e) offerLast(e)
删除 removeFirst() pollFirst() removeLast() pollLast()
检查 getFirst() peekFirst() getLast() peekLast()

【Java】Java队列Queue使用详解相关推荐

  1. python queue 查询是否在队列中_python队列Queue的详解

    Queue Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递 基本FIFO队列 clas ...

  2. C++队列queue用法详解

    一.定义 queue是一种容器转换器模板,调用#include< queue>即可使用队列类. 二.queue初始化 queue<Type, Container> (<数 ...

  3. python队列只能一个个读取吗_python队列Queue的详解

    Queue Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递 基本FIFO队列 clas ...

  4. Java队列Queue使用详解(*)

    Queue是java中实现队列的接口,它总共只有6个方法,我们一般只用其中3个就可以了.Queue的实现类有LinkedList和PriorityQueue.最常用的实现类是LinkedList. Q ...

  5. python队列Queue的详解

    Process之间有时需要通信,操作系统提供了很多机制来实现进程间的通信. 1. Queue的使用 可以使用multiprocessing模块的Queue实现多进程之间的数据传递,Queue本身是一个 ...

  6. Java开发常见面试题详解(LockSupport,AQS,Spring循环依赖,Redis)_3

    Java开发常见面试题详解(LockSupport,AQS,Spring循环依赖,Redis)_3 总览 问题 详解 String.intern()的作用 link LeetCode的Two Sum题 ...

  7. java线程池ThreadPoolExecutor类详解

    线程池有哪些状态 1. RUNNING:  接收新的任务,且执行等待队列中的任务 Accept new tasks and process queued tasks  2. SHUTDOWN: 不接收 ...

  8. Java并发编程最佳实例详解系列

    Java并发编程最佳实例详解系列: Java并发编程(一)线程定义.状态和属性 Java并发编程(一)线程定义.状态和属性 线程是指程序在执行过程中,能够执行程序代码的一个执行单元.在java语言中, ...

  9. Java多线程之线程池详解

    Java多线程之线程池详解 目录: 线程池使用及优势 线程池3个常用方式 线程池7大参数深入介绍 线程池底层工作原理 1. 线程池使用及优势 线程池做的工作主要是控制运行的线程的数量,处理过程中将任务 ...

最新文章

  1. 获取图片像素颜色,转换为CSS3 box-shadow显示
  2. 安卓从sd引导linux,从android中的adb shell手动挂载SD卡
  3. C#中String对象转换为Font对象的方法
  4. 机器学习笔记:Adagrad
  5. boolean searching, it is so important for searching your papers
  6. c语言gcc汇编文件,[汇编]gcc生成汇编.s文件 $ gcc -Og -S sum.c /$ gcc -Og -S -masm=intel sum.c 与 反汇编 objdump...
  7. 好图表的标准是什么?手把手教你用GLAD原则优化一张看板
  8. 【Python笔记】元组的用法
  9. iOS 开发 申请定位
  10. C语言中的逗号操作符
  11. WTL学习笔记(5)系统皮肤管理
  12. TCP 粘包/拆包说明 及 异常案例
  13. Socket服务端与网络调试助手模拟串口服务器通讯示例
  14. 前端vue实现PDF预览
  15. 虚拟钢琴键盘音源合集 Toontrack EZkeys Complete 1.2.5 WiN-MAC
  16. Unity获取IOS端相机权限的状态
  17. rabbitmq 手动提交_RabbitMQ 相关问题总结--RabbitMQ 如何确保消息发送和消费?
  18. 什么是静电?什么是ESD?ESD分为几种形式?有哪些测试标准?
  19. kgm转mp3安卓_酷狗KGM转MP3格式工具电脑版
  20. CPU卡内部认证与外部认证

热门文章

  1. Access denied的解决
  2. 使用Virtuso绘制电路图问题
  3. 万无一失的自杀方法_如何创建万无一失的Shell脚本
  4. 工作中心------(整理)
  5. SVN提交出错:Attempted to lock an already-locked dir
  6. Webharvest网络爬虫应用总结
  7. SONiC架构DOCKER组件交互分析
  8. 乐嘉说的那些比较有道理的话,女孩应该懂,男孩也该懂。
  9. 解决vista系统在安装服务时候报.net Framework installation utility 已停止工作
  10. ORACLE 创建用户权限