Java的Deque之Deque、BlockingDeque、LinkedBlockingDeque、ArrayDeque

news/2025/3/6 13:25:46/文章来源:https://www.cnblogs.com/trymybug/p/18754954

在Java集合框架中,Deque接口扮演了一个十分重要的角色。Deque,全称为“Double Ended Queue”,双端队列,是一个线性集合,允许在集合的两端插入和移除元素。Deque接口在Java中具有多种实现,主要包括ArrayDeque和LinkedBlockingDeque,此外在并发包中还有BlockingDeque接口,是Deque的一个扩展,用于并发编程。

Deque接口

Deque接口在Java的java.util包中,是一个双端队列。Deque接口允许我们将元素插入或删除队列的两端。具有队列queue和栈stack的性质,允许在两端进行元素的入队和出队。主要方法包括addFirst、addLast、offerFirst、offerLast、removeFirst、removeLast、pollFirst和pollLast等。

ArrayDeque类

ArrayDeque是Deque接口的一个具体实现,内部使用可变数组支持。它是一个更快的栈实现(与Stack相比)和一个更快的队列实现(与LinkedList相比)。ArrayDeque是不线程安全的,因此在多线程中使用它时,需要外部同步。ArrayDeque不支持存储null元素。

LinkedBlockingDeque类

LinkedBlockingDeque实现了BlockingDeque接口,是一个由链表支持的可选有界双端阻塞队列。此队列的可选容量,在创建时可指定,如果不指定,则默认为 Integer.MAX_VALUE。LinkedBlockingDeque中的阻塞方法遵循BlockingDeque接口的定义,执行插入、移除和获取操作时,如果无法立即执行,则线程会阻塞,等待操作的执行。由于其线程安全的特性,LinkedBlockingDeque在多线程并发环境中使用十分广泛。

BlockingDeque接口

BlockingDeque是Deque的一个扩展,它定义了阻塞操作。它支持等待队列变为可用的操作,包括等待队列中的元素可用,或者队列中有可用的空间插入元素。因此,BlockingDeque在多线程的生产者-消费者场景中非常有用。

使用场景

  • ArrayDeque:在需要高效进行双端元素操作,且无需线程安全支持的场景中使用ArrayDeque。适用于栈(后进先出)或队列(先进先出)的数据结构实现。
  • LinkedBlockingDeque:在需要线程安全的生产者-消费者场景中使用LinkedBlockingDeque。比如,在多线程要处理一系列任务,且任务产生和消费的速率不一定相同的情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/894597.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯出品!这款Markdown神器让你码字效率翻倍,双模式编辑太香了!

由腾讯开源的CherryMarkdown编辑器,集思维导图式大纲写作与专业分屏模式于一身,支持实时预览、流程图绘制、多主题切换等硬核功能,助你轻松驾驭技术文档、博客写作、会议纪要等多种场景!嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学…

AI 在 Java Web 开发中的变革性应用:重塑开发未来

1. 智能代码生成与优化:开启高效开发的新纪元 在传统的 Java Web 开发中,编写基础代码往往占据了大量的时间和精力,尤其是重复性的模板代码。然而,AI 的出现彻底改变了这一现状。通过自然语言处理(NLP)技术,AI 能够理解开发者的自然语言描述,并自动生成高质量的基础代码…

20242931 2024-2025-2 《网络攻防实践》第一周作业

20242931 2024-2025-2 《网络攻防实践》第一周作业 1. 知识点梳理与总结 1.1 攻击机、靶机、SEED虚拟机、蜜网网关和蜜罐技术简介攻击机(Attacker Machine):攻击机是攻击者的操作平台,用于模拟各种网络攻击行为,测试靶机的安全性,并验证攻击技术的有效性。它是网络攻防实…

通达信打造个性化的文本标记系统

通达信的指标体系以数字为主,文本字符串的可行操作很少。 之前,尝试了无数方法,终于通过DLL,可以把通达信的文字传入到DLL中。 通达信如何向dll传递字符串​mp.weixin.qq.com/s?__biz=MzIxNzUyNTI4MA==&mid=2247483755&idx=1&sn=eb187f4f04c92c08fd45bd7f970b…

【VMware by Broadcom】VMware 产品套件(2025)

VMware 被 Broadcom 收购后(现为 VMware by Broadcom),重新调整了其产品部门并最终优化为了四个,分别是:VMware Cloud Foundation(VCF)部门、Application & Network Security(ANS)部门、VMware Tanzu 部门以及 VeloCloud 部门。VMware Cloud Foundation(VCF)部门…

变量命名不规范我被deepseek骗了

首先是一个实体类@Data public class Dto {private String mNumber; } 前端传来{"mNumber:"123"}为null的情况 编译之后我们看看class文件:getMNumberpublic class Dto {private String mNumber;public Dto() {}public String getMNumber() {return this.mNum…

GPT-4.5 感觉有点拉胯,但其实是 OpenAI 迄今为止最大的一步赌注

Alberto RomeroI. GPT-4.5 就是起跳前的助跑那一步 OpenAI 推出了 GPT-4.5(官方博客、系统卡片、演示视频),这是他们最新也是目前最大的一款 AI 模型。他们其实一年多前就开始放风,说它叫 Orion,结果很多人还以为是 GPT-5。现在终于来了……但感觉吧,有点拉胯。至少看起来…

GPT 4.5 可能是戳破 AI 泡沫的模型

GPT 4.5 可能是戳破 AI 泡沫的模型 Andrew Zuo本文点评:在AI技术狂飙突进的同时,也有许多声音包括本文的作者在内都认为AI行业正陷入巨大泡沫,技术突破逐渐停滞,高昂的硬件成本与资本退潮或将引爆寒冬。然而,这些观点大多忽视了技术的本质价值,真正值得关注的并非模型参数…

前端静态页面放在oss上cdn上的配置

0. 这次改造的原因问题1:前端发布的过程中由于使用了单pod,发布完pod在启动的时候服务对外不可用问题2:如果用滚动更新可能会带来的问题 发布过程中,机器A发布完了,机器B没有发布完。 用户访问一个页面,页面请求打在 A上,然后js资源打在B上,B上没有然后就命中了404逻辑…

Nginx 工作机制参数设置(详细讲解说明)

1. Nginx 当中的 master-worker 机制原理 master-worker 工作原理图:一个 master 管理多个 worker[root@localhost ~]# cd /usr/local/nginx/ [root@localhost nginx]# ls auto CHANGES.ru conf contrib html logs man proxy_temp sbin …

无钥匙进入系统和无钥匙启动系统PEPS

经纬恒润的无钥匙进入及启动系统简称 PEPS (Passive Entry Passive Start) 系统,采用 RFID(无线射频识别)技术,实现无需按动遥控器即可进入车内以及一键启动发动机等功能。 经纬恒润的无钥匙进入及启动系统简称 PEPS (Passive Entry Passive Start) 系统,采用 RFID(无…

阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!

3月6日最新消息,阿里云通义千问官方宣布推出最新推理模型 QwQ-32B,这一模型仅有 32B 参数,但在效果上与拥有 671B 参数的 DeepSeek-R1 相媲美。如果你自己部署 DeepSeek-R1 但资源不够的话,又多了一个新的选择。 QwQ-32B 的独特之处不仅在于其参数规模和效果表现,还集成了…