当前位置: 首页 > news >正文

Java数据结构之Deque(双端队列)

一、Queue和Deque异同介绍

我们知道,Queue是队列,只能一头进,另一头出。

如果把条件放松一下,允许两头都进,两头都出,这种队列叫双端队列(Double Ended Queue),学名Deque。

Java集合提供了接口Deque来实现一个双端队列,它的功能是:

既可以添加到队尾,也可以添加到队首;
既可以从队首获取,又可以从队尾获取。
首先我们比较下Queue和Deque出队和入队的方法:

QueueDeque
添加元素到队尾add(E e) / offer(E e)addLast(E e) / offerLast(E e)
取队首元素并删除E remove() / E poll()E removeFirst() / E pollFirst()
取队首元素但不删除E element() / E peek()E getFirst() / E peekFirst()
添加元素到队首addFirst(E e) / offerFirst(E e)
取队尾元素并删除E removeLast() / E pollLast()
取队尾元素但不删除E getLast() / E peekLast()

注:这里解释先为什么Queue或者Deque都有两种方法,它们有什么区别?

1、add()和offer()区别:

add()和offer()都是向队列中添加一个元素。一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,调用 add() 方法就会抛出一个 unchecked 异常,而调用 offer() 方法会返回 false。因此就可以在程序中进行有效的判断!

2、poll()和remove()区别:

remove() 和 poll() 方法都是从队列中删除第一个元素。如果队列元素为空,调用remove() 的行为与 Collection 接口的版本相似会抛出异常,但是新的 poll() 方法在用空集合调用时只是返回 null。因此新的方法更适合容易出现异常条件的情况。

3、element() 和 peek()区别:

element() 和 peek() 用于在队列的头部查询元素。与 remove() 方法类似,在队列为空时, element() 抛出一个异常,而 peek() 返回 null。

上面介绍的是Queue的两中方法,Deque也是相同的就不介绍了。

二、Deque作为队列和堆栈的介绍

我们知道Queue的数据结构是一个队列,即:FIFO(先进先出)。从队尾添加元素,从对头删除元素。Deque也有等效的方法作为一个FIFO队列,具体方法如下:

Queue 方法等效 Deque 方法
add(e)addLast(e)
offer(e)offerLast(e)
remove()removeFirst()
poll()pollFirst()
element()getFirst()
peek()peekFirst()

Deque(双端队列)也可以用作LIFO(后进先出)堆栈(也就是栈),应优先使用此接口而不是遗留 Stack类。在将双端队列用作堆栈时,元素被推入双端队列的开头并从双端队列开头弹出。堆栈方法完全等效于Deque 方法,如下表所示:

堆栈方法等效 Deque 方法
push(e)addFirst(e)
pop()removeFirst()
peek()peekFirst()

总结:

1、Queue只能从队尾插入,从对头删除。

2、Deque对头队尾都可以进行插入和删除。

3、Deque根据不同的插入和删除方法可以实现队列和堆栈(也就是栈)这两种数据结构。

相关文章:

Java数据结构之Deque(双端队列)

一、Queue和Deque异同介绍 我们知道,Queue是队列,只能一头进,另一头出。 如果把条件放松一下,允许两头都进,两头都出,这种队列叫双端队列(Double Ended Queue),学名Deq…...

flink以增量+全量的方式更新广播状态

背景 flink在实现本地内存和db同步配置表信息时,想要做到类似于增量(保证实时性) 全量(保证和DB数据一致)的效果,那么我们如何通过flink的广播状态外部定时器定时全量同步的方式来实现呢? 实现增量全量的效果 package wikiedits.schedule…...

Java:org.apache.commons.io包的工具类:IOUtils、FileUtils、FilenameUtils

文档 https://commons.apache.org/proper/commons-io/https://central.sonatype.com/artifact/commons-io/commons-io/2.14.0/jar 工具类 IOUtils io工具类FileUtils 文件操作工具类FilenameUtils 文件名工具类 依赖 <dependency><groupId>commons-io</gro…...

【JavaEE】文件操作

文章目录 前言什么是文件树型结构组织和目录文件路径文件类型文件权限Java中的文件操作File 类的常见属性File 类常见构造方法File 类常用方法 前言 文件是我们日常生活中使用非常广泛的&#xff0c;我们使用任何一个程序都离不开文件操作&#xff0c;这个文件不仅仅指平时可以…...

高精度电流源的应用领域有哪些

高精度电流源是一种能够提供稳定、准确、可控的电流输出的仪器设备&#xff0c;广泛应用于多个领域。以下是一些高精度电流源的应用领域。 科学研究&#xff1a;在物理学、化学、材料科学等领域中&#xff0c;需要进行精确的电流实验和测试。高精度电流源可以提供稳定的电流输出…...

多线程 - 线程池

线程池 相关的背景知识 线程池存在的意义: 使用进程来实现并发编程,效率太低了,任务太重了,为了提高效率,此时就引入了线程,线程也叫做“轻量级进程”,创建线程比创建进程更高效;销毁线程比销毁进程更高效;调度线程比调度进程更高效…此时,使用多线程就可以在很多时候代替进程…...

vue3 setup中defineEmits与defineProps的使用案例

目录 一、defineEmits的使用 二、 defineProps的使用 总结 一、defineEmits的使用 使用说明 1、在子组件中调用defineEmits并定义要发射给父组件的方法 const emits defineEmits([foldChange]) 2、使用defineEmits会返回一个方法&#xff0c;使用一个变量emits(变量名随意…...

Vs - Qt - 下拉窗口示例

下列代码定义了一个窗口&#xff0c;窗口采用竖直布局&#xff1a;一个按钮及一个label。按下按钮时候&#xff0c;窗口扩张&#xff0c;显示label控件。再次按下按钮时&#xff0c;窗口收缩&#xff0c;隐藏label控件。 详细代码如下&#xff1a; #include <QApplication&g…...

深圳自贸区的形成与发展

深圳自贸区的形成与发展源于中国政府推出的自贸试验区政策。自贸试验区是指在特定区域内&#xff0c;允许实行特殊的行政管理措施和贸易政策&#xff0c;以促进贸易自由化、投资便利化和经济转型升级。 深圳自贸区成立于2015年4月以来&#xff0c;主要着眼于优化区域布局、提高…...

机器人中的数值优化(二十一)—— 伴随灵敏度分析、线性方程组求解器的分类和特点、优化软件

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考&#xff0c;主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等&#xff0c;本系列文章篇数较多&#xff0c;不定期更新&#xff0c;上半部分介绍无约束优化&#xff0c;…...

BACnet /IP转MQTT网关

在工业自动化和楼宇自动化领域中&#xff0c;Modbus、MQTT和BACnet/IP是三种常用的通信协议。Modbus是一种串行通信协议&#xff0c;常用于连接工业电子设备&#xff1b;MQTT是一种基于发布/订阅模式的轻量级通信协议&#xff0c;适用于远程监测和控制系统&#xff1b;BACnet/I…...

Web API 基础 (Web Workers API)

Web Workers API 1、指南 1.1 使用Web Workers Web Workers是一种让Web内容在后台线程中运行脚本的简单方法。工作线程可以在不干扰用户界面的情况下执行任务。此外&#xff0c;它们还可以使用XMLHttpRequest(尽管responseXML和channel属性总是为空)或fetch(没有此类限制)执…...

如何看待程序员不写注释?

程序员对代码注释可以说是又爱又恨又双标……你是怎么看待程序员不写注释这一事件的呢&#xff1f; 对于程序员来说&#xff0c;注释是一种非常重要的实践&#xff0c;可以帮助他们自己和其他人更好地理解和维护代码。以下是一些关于注释的观点&#xff1a; 维护代码的重要性&a…...

2.6 方法

思维导图&#xff1a; 2.6.1 什么是方法 ### 2.6.1 什么是方法 **定义**: - 方法就是一段可以重复调用的代码&#xff0c;使得程序的可读性、可维护性都得以提高。 **示例**: - 假设有一个游戏中需要反复发射炮弹。而发射炮弹的代码有100行。为了避免在程序中多次写下这100…...

【排序算法】插入排序

文章目录 一&#xff1a;基本概念1.1 介绍1.2 原理1.3 插入排序法思想 二&#xff1a;代码实现2.1 源码2.2 执行结果2.3 测试八万条数据 三&#xff1a;算法分析3.1 时间复杂度3.2 空间复杂度3.3 稳定性 一&#xff1a;基本概念 1.1 介绍 插入式排序属于内部排序法&#xff0…...

Gnuradio+AM解调

1. https://wiki.gnuradio.org/index.php/PLL_Carrier_Tracking 2. https://wiki.gnuradio.org/index.php?titleComplex_to_Mag#Example_Flowgraph...

解决java.io.IOException: Broken pipe的报错

问题说明&#xff1a; 订单服务&#xff0c;查询预售但是出现Broken pipe&#xff1b; 测试版是正常的&#xff0c;正式版报错 解决方案 1、延长客户端超时时间 // 查询预售单列表 export function listPreOrder(query) {return request({url: /order/presale/list,method:…...

微信小程序--》从模块小程序项目案例23.10.09

配置导航栏 导航栏是小程序的门户&#xff0c;用户进来第一眼看到的便是导航栏&#xff0c;其起着对当前小程序主题的概括。而我们 新建的小程序 时&#xff0c;第一步变开始配置导航栏。如下&#xff1a; 配置tabBar 因为配置tabBar需要借助字体图标&#xff0c;我这里平常喜…...

爱尔眼科角膜塑形镜验配超百万,全力做好“角塑镜把关人”

你知道吗?过去的2022年&#xff0c;我国儿童青少年总体近视率为53.6%&#xff0c;其中6岁儿童为14.5%&#xff0c;小学生为36%&#xff0c;初中生为71.6%&#xff0c;高中生为81%①。儿童青少年眼健康问题俨然成为全社会关心的热点与痛点&#xff0c;牵动着每一个人的神经。 好…...

机器学习DAYX:线性回归与逻辑回归

线性回归 多重线性回归 逻辑回归...

【网络安全】网络安全的最后一道防线——“密码”

网络安全的最后一道防线——“密码” 前言超星学习通泄露1.7亿条信息事件武汉市地震监测中心遭境外网络攻击事件 一、密码起源1、 古代密码2、近代密码3、现代密码4、量子密码 二、商密专栏推荐三、如何利用密码保护账号安全&#xff1f;1、账号安全的三大危险&#xff1f;&…...

unity操作_光源组件 c#

准备工作 添加资源导入后先不管&#xff0c;现在主要学习自带Directional Light 我们首先创建一个平面Plane 然后重置一下位置 然后创建一个Cube 也重置一下位置然后修改y0.5刚好在这个平面上 ctrl d复制一个Cube 修改位置和旋转角度 给物体一个颜色 接下来创建一个点光源 我们…...

2023年全球市场氮化铝外延片总体规模、主要生产商、主要地区、产品和应用细分研究报告

按收入计&#xff0c;2022年全球氮化铝外延片收入大约9百万美元&#xff0c;预计2029年达到25百万美元&#xff0c;2023至2029期间&#xff0c;年复合增长率CAGR为 16.1%。同时2022年全球氮化铝外延片销量大约 &#xff0c;预计2029年将达到 。2022年中国市场规模大约为 百万美…...

C++特性:继承,封装,多态

继承 封装 类把⾃⼰的数据和⽅法只让可信的类或者对象操作&#xff0c;对不可信的进⾏隐藏&#xff0c;如&#xff1a;将公共的数据或⽅法使⽤public修饰&#xff0c;⽽不希望被访问的数据或⽅法采⽤private修饰 多态 即向不同对象发送同⼀消息&#xff0c;不同的对象在接收…...

交通物流模型 | 基于双向时空自适应Transformer的城市交通流预测

城市交通流预测是智能交通系统的基石。现有方法侧重于时空依赖建模,而忽略了交通预测问题的两个内在特性。首先,不同预测任务的复杂性在不同的空间(如郊区与市中心)和时间(如高峰时段与非高峰时段)上分布不均匀。其次,对过去交通状况的回忆有利于对未来交通状况的预测。基于…...

【香橙派-OpenCV-Torch-dlib】TF损坏变成RAW格式解决方案及python环境配置

前言 本文将介绍在香橙派&#xff08;Orange Pi&#xff09;开发板上进行软件配置和环境搭建的详细步骤&#xff0c;以便运行Python应用程序。这涵盖了以下主要内容&#xff1a; 获取所需软件&#xff1a;提供了香橙派操作系统和balenaEtcher工具的下载链接&#xff0c;以确保…...

HDMI协议介绍(五)--Audio

基础知识 I2S(inter-IC sound bus)飞利浦公司制定的标准&#xff0c;既规定了硬件接口规范&#xff0c;也规定了数字音频数据格式。 硬件接口规范 I2S接口有3个主要信号&#xff1a; 时钟信号 Serial Clock 串行时钟SCK&#xff0c;也叫位时钟&#xff08;BCLK&#xff09;&…...

Centos7中安装Jenkins教程

1.必须先配置jdk环境&#xff0c;安装jdk参考 Linux配置jdk 2.先卸载Jenkins # rpm卸载 rpm -e jenkins # 检查是否卸载成功 rpm -ql jenkins # 彻底删除残留文件 find / -iname jenkins | xargs -n 1000 rm -rf 3.安装Jenkins 在 /usr/ 目录下创建 jenkins文件夹 mkdir -p je…...

十一、WSGI与Web框架

目录 一、什么是WSGI1.1 WSGI接口的组成部分1.2 关于environ 二、简易的web框架实现2.1 文件结构2.2 在web/my_web.py定义动态响应内容2.3 在html/index.html中定义静态页面内容2.4 在web_server.py中实现web服务器框架2.5 测试 三、让简易的web框架动态请求支持多页面3.1 修改…...

[idekCTF 2022]Paywall - LFI+伪协议+filter_chain

[idekCTF 2022]Paywall 一、解题流程&#xff08;一&#xff09;、分析&#xff08;二&#xff09;、解题 二、思考总结 一、解题流程 &#xff08;一&#xff09;、分析 点击source可以看到源码&#xff0c;其中关键部分&#xff1a;if (isset($_GET[p])) {$article_content…...