【Java】Java队列Queue使用详解
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使用详解相关推荐
- python queue 查询是否在队列中_python队列Queue的详解
Queue Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递 基本FIFO队列 clas ...
- C++队列queue用法详解
一.定义 queue是一种容器转换器模板,调用#include< queue>即可使用队列类. 二.queue初始化 queue<Type, Container> (<数 ...
- python队列只能一个个读取吗_python队列Queue的详解
Queue Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递 基本FIFO队列 clas ...
- Java队列Queue使用详解(*)
Queue是java中实现队列的接口,它总共只有6个方法,我们一般只用其中3个就可以了.Queue的实现类有LinkedList和PriorityQueue.最常用的实现类是LinkedList. Q ...
- python队列Queue的详解
Process之间有时需要通信,操作系统提供了很多机制来实现进程间的通信. 1. Queue的使用 可以使用multiprocessing模块的Queue实现多进程之间的数据传递,Queue本身是一个 ...
- Java开发常见面试题详解(LockSupport,AQS,Spring循环依赖,Redis)_3
Java开发常见面试题详解(LockSupport,AQS,Spring循环依赖,Redis)_3 总览 问题 详解 String.intern()的作用 link LeetCode的Two Sum题 ...
- java线程池ThreadPoolExecutor类详解
线程池有哪些状态 1. RUNNING: 接收新的任务,且执行等待队列中的任务 Accept new tasks and process queued tasks 2. SHUTDOWN: 不接收 ...
- Java并发编程最佳实例详解系列
Java并发编程最佳实例详解系列: Java并发编程(一)线程定义.状态和属性 Java并发编程(一)线程定义.状态和属性 线程是指程序在执行过程中,能够执行程序代码的一个执行单元.在java语言中, ...
- Java多线程之线程池详解
Java多线程之线程池详解 目录: 线程池使用及优势 线程池3个常用方式 线程池7大参数深入介绍 线程池底层工作原理 1. 线程池使用及优势 线程池做的工作主要是控制运行的线程的数量,处理过程中将任务 ...
最新文章
- 获取图片像素颜色,转换为CSS3 box-shadow显示
- 安卓从sd引导linux,从android中的adb shell手动挂载SD卡
- C#中String对象转换为Font对象的方法
- 机器学习笔记:Adagrad
- boolean searching, it is so important for searching your papers
- c语言gcc汇编文件,[汇编]gcc生成汇编.s文件 $ gcc -Og -S sum.c /$ gcc -Og -S -masm=intel sum.c 与 反汇编 objdump...
- 好图表的标准是什么?手把手教你用GLAD原则优化一张看板
- 【Python笔记】元组的用法
- iOS 开发 申请定位
- C语言中的逗号操作符
- WTL学习笔记(5)系统皮肤管理
- TCP 粘包/拆包说明 及 异常案例
- Socket服务端与网络调试助手模拟串口服务器通讯示例
- 前端vue实现PDF预览
- 虚拟钢琴键盘音源合集 Toontrack EZkeys Complete 1.2.5 WiN-MAC
- Unity获取IOS端相机权限的状态
- rabbitmq 手动提交_RabbitMQ 相关问题总结--RabbitMQ 如何确保消息发送和消费?
- 什么是静电?什么是ESD?ESD分为几种形式?有哪些测试标准?
- kgm转mp3安卓_酷狗KGM转MP3格式工具电脑版
- CPU卡内部认证与外部认证