【详解】Java中的queue和deque、ArrayDeque

news2024/12/22 14:30:39

一 、队列(queue)简述

队列(queue)是一种常用的数据结构,在Java里面Queue是一个接口,它只是定义了一个基本的Queue应该有哪些功能规约。可以将队列看做是一种特殊的线性表,该结构遵循的先进先出原则。

Java中,LinkedList实现了Queue接口,因为LinkedList进行插入、删除操作效率较高。

//将元素插入队列
boolean add(E e);
//将元素插入队列,与add相比,在容量受限时应该使用这个
boolean offer(E e);
//将队首的元素删除,队列为空则抛出异常
E remove( );
//将队首的元素删除,队列为空则返回null
E poll();

//获取队首元素,但不移除,队列为空则抛出异常
E element(;
//获取队首元素,但不移除,队列为空则返回nu11E 
peek()

二、双端队列(Deque)简述

双向队列(Deque) 全称为 double ended queue,是Queue的一个子接口,双向队列是指该队列两端的元素既能入队(offer)也能出队(poll),除此之外,其余特性则和父级 Queue 类似。如果将Deque限制为只能从一端入队和出队,则可实现栈的数据结构。对于栈而言,有入栈(push)和出栈(pop),遵循先进后出原则。

Deque 中定义的方法主要分为四部分,

  1. 第一部分就如 Deque 定义所言,提供两侧插入或删除的方法。
  2. 第二部分是继承自 Queue 的实现。
  3. 第三部分表示如果要基于此实现一个stack需要实现的方法。
  4. 最后一部分是继承自 collection 的方法。

此接口定义在双端队列两端访问元素的方法。提供插入、移除和检查元素的方法。
每种方法都存在两种形式:

  • 一种形式在操作失败时抛出异常。
  • 另一种形式返回一个特殊值(null 或 false,具体取决于操作)。
  • 插入操作的后一种形式是专为使用有容量限制的 Deque 实现设计的;在大多数实现中,插入操作不能失败。
//在队首添加元素
void addFirst(E e);
boolean offerFirst(E e);

//在队尾添加元素
void addLast(E e);
boolean offerLast(E e);

//删除队首元素
E removeFirst();
E pollFirst();

//删除队尾元素
E removeLast();
E pollLast();

//获取队首元素
E getfirst();
E peekFirst();

//获取队尾元素
E getLast();
E peekLast();

//删除第一个事件,大多数指的是删除第一个和 o equals的元素
boolean removeFirstoccurrence(object o);
//删除最后一个事件,大多数指的是删除最后一个和 o equals的元素
boolean removeLastoccurrence(object o);

当作为队列使用时,我们会将它与LinkedList 类来做对比。因为 Deque接口继承自 Queue接口,在这里,分别列出两者接口所定义的方法,两者内容区别如下:
在这里插入图片描述
当作为找使用时,难免会将它与 Stack 的类做比较,Stack类的数据结构也是后进先出,可以作为栈来使用,分别列出 Stack 类和 Deque 接口所定义的方法,两者内容区别如下:
在这里插入图片描述

三、ArrayDeque

ArrayDeque类是 双端队列的线性实现类。
虽然,ArrayDeque 和 Stack类都可以作为 来使用,但是 ArrayDeque 的效率要高于 Stack类,并且功能也比 Stack类丰富的多,当需要使用栈时,Java 已不推荐使用 Stack,而是推荐使用更高效的 ArrayDeque,次选LinkedList.

ArrayDeque 通过循环数组的方式实现的循环队列,并通过位运算来提高效率,容量大小始终是2的次幂。当数据充满数组时,它的容量将翻倍。
作为 stack ,因为其非线程安全所以效率高于java.util.stack,
而作为队列,因为其不需要结点支持所以更快 (LinkedList使用Node存储数据,这个对象频繁的new与clean,使得其效率略低于ArrayDeque) 。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RabbitMQ入门案例之发布订阅模式

前言 本文章主要介绍RabbitMQ的发布订阅模式,该模式下,消息为广播形式,一经发布则会进入交换机绑定的队列中,详细介绍可以阅读官方文档。 官网文档地址:https://rabbitmq.com/getstarted.html 什么是发布与订阅模式 …

对比K近邻算法与决策树算法在MNIST数据集上的分类性能

目录 1. 作者介绍2. K近邻算法与决策树算法介绍2.1 K近邻(KNN)简介2.2 决策树算法简介2.3 MNIST数据集简介: 3. K近邻算法和决策树算法在Mnist数据集分类实验对比3.1 K近邻算法对Mnist数据集分类实验3.2 K近邻代码实现3.3 决策树算法实验3.4 …

Vue3:组件高级(上)

Vue3:组件高级(上) Date: May 20, 2023 Sum: watch倾听器、组件的生命周期、组件之间的数据共享、vue3.x中全局配置axios 目标: 能够掌握 watch 侦听器的基本使用 能够知道 vue 中常用的生命周期函数 能够知道如何实现组件之间…

写 bug 速度提升200%!吊爆的 IDEA 使用技巧

背景 Java 开发过程经常需要编写有固定格式的代码,例如说声明一个私有变量,logger或者bean等等。 对于这种小范围的代码生成,我们可以利用 IDEA 提供的 Live Templates功能。 刚开始觉得它只是一个简单的Code Snippet,后来发现…

msf渗透练习-震网三代

说明: 本章内容,仅供学习,不要用于非法用途(做个好白帽) (一)震网三代漏洞 “震网三代”官方漏洞编号是CVE-2017-8464,2017年6月13日,微软官方发布编号为CVE-2017-8464的…

Redis Cluster集群运维-03

1、Redis集群方案比较 哨兵模式 在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异 常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可…

【CSS】常见的选择器

1.标签选择器 语法 标签 { }作用 标签选择器用于选择某种标签比如 选择p标签,并设置背景颜色 p { background-color:yellow; }例子 选择div标签,并将其字体大小设置为100px,字体设置为"微软雅黑",文字颜色设置为r…

怎么学习渗透测试?路线是什么

我知道很多人肯定觉得,报班什么的太贵了,但是人家贵有贵的道理 owap讲来讲去,还是那个样,但是有人给你解答问题是两个概念,有时候一个虚拟机都能卡死你很久,我就随便说说,我给你们想的学习路线…

2023网络安全工程师面试题汇总(附答案)

又到了毕业季,大四的漂亮学姐即将下架,大一的小学妹还在来的路上,每逢这时候我心中总是有些小惆怅和小激动…… 作为学长,还是要给这些马上要初出茅庐的学弟学妹们,说说走出校园、走向职场要注意哪些方面。 走出校园后…

基于XC7Z100的PCIe采集卡(GMSL FMC采集卡)

GMSL 图像采集卡 特性 ● PCIe Gen2.0 X8 总线; ● 支持V4L2调用; ● 1路CAN接口; ● 6路/12路 GMSL1/2摄像头输入,最高可达8MP; ● 2路可定义相机同步触发输入/输出; 优势 ● 采用PCIe主卡与FMC子…

服务器是什么?它是用来干什么的?

作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 目录 一、服务器是什么? 二、服务器的作用 1、提高访问速度 2、提高安全性 三、云服务器与物理服务器 1、云服务器 云服务…

[架构之路-210]- 人人都是产品经理 - 互联网产品需求分析思路和方法笔记

目录 前言: 一、产品需求分析思路和方法--产品需求 1、产品需求的内涵 ①什么是产品? ②什么是需求? ③需求的产品的关系 ④案例分析: ⑤理解需求的误区 2、需求的分类及层次、规律、拆解用户需求 ①需求分类 ②需求层…

算法刷题-链表-设计链表

设计链表 707.设计链表思路代码其他语言版本 听说这道题目把链表常见的五个操作都覆盖了? 707.设计链表 力扣题目链接 题意: 在链表类中实现这些功能: get(index):获取链表中第 index 个节点的值。如果索引无效,则…

MySQL数据库,从入门到精通:第二篇——MySQL关系型数据库与非关系型数据库的比较

MySQL数据库,从入门到精通:第二篇——MySQL关系型数据库与非关系型数据库的比较 1. RDBMS 与 非RDBMS1.1 关系型数据库(RDBMS)1.1.1 实质1.1.2 优势1.2 非关系型数据库(非RDBMS)1.2.1 介绍1.2.2 有哪些非关系型数据库1.2.3 NoSQL的演变1.3 小结 2. 关系型…

SQL开源替代品,诞生了

发明 SQL 的初衷之一显然是为了降低人们实施数据查询计算的难度。SQL 中用了不少类英语的词汇和语法,这是希望非技术人员也能掌握。确实,简单的 SQL 可以当作英语阅读,即使没有程序设计经验的人也能运用。 然而,面对稍稍复杂的查…

Python+QT停车场车牌识别计费管理系统-升级版

程序示例精选 PythonQT停车场车牌识别计费管理系统-升级版 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<PythonQT停车场车牌识别计费管理系统-升级版>>编写代码&#xff0c;代…

RabbitMQ入门案例之Direct模式

前言 RabbitMQ的Direct模式是一种可以根据指定路由key&#xff0c;Exchang将消息发送到具有该路由key下的Queue下进行存储。也就类似于将数据写进指定数据库表中。这个路由Key可以类比为SQL语句中的&#xff1a;where routeKey … 官方文档地址&#xff1a;https://www.rabbi…

DragGAN部署全流程

写在前面 看了DragGAN 官方&#xff0c;并没有找到软件&#xff0c;或者程序&#xff0c;github上也没有程序&#xff0c;如果大佬们能找到&#xff0c;可以评论通知下。不过也有技术大佬已经提前开发出来了&#xff0c;我们抢先体验下。 这里本地部署了 DragGAN。经历了报错&…

【LeetCode】HOT 100(5)

题单介绍&#xff1a; 精选 100 道力扣&#xff08;LeetCode&#xff09;上最热门的题目&#xff0c;适合初识算法与数据结构的新手和想要在短时间内高效提升的人&#xff0c;熟练掌握这 100 道题&#xff0c;你就已经具备了在代码世界通行的基本能力。 目录 题单介绍&#…

CTFShow-WEB入门篇--命令执行详细Wp

WEB入门篇--命令执行详细Wp 命令执行&#xff1a;Web29&#xff1a;Web30&#xff1a;Web31&#xff1a;web32&#xff1a;web33&#xff1a;web34&#xff1a;web35&#xff1a;web36&#xff1a;web37&#xff1a;web38&#xff1a; CTFShow 平台&#xff1a;https://ctf.sho…