Queue 中 poll()和 remove()的区别(详解)

news2024/11/29 10:34:06

系列文章目录

1.SpringBoot整合RabbitMQ并实现消息发送与接收
2. 解析JSON格式参数 & 修改对象的key
3. VUE整合Echarts实现简单的数据可视化
4. List<HashMap<String,String>>实现自定义字符串排序(key排序、Value排序)
5. 使用AOP切面实现日志记录功能

更多该系列文章可以看我主页哦


文章目录

  • 系列文章目录
  • 前言
  • 一、poll()方法使用及特点
    • 1.1 使用
    • 1.2 特点
    • 1.3 注意点
  • 二、remove()使用及特点
    • 2.1 使用
    • 2.2 特点
    • 2.3 注意点
  • 总结


前言

         在 Java 中,Queue 是一个接口,表示一种先进先出(FIFO)的数据结构。它继承自 Collection 接口,定义了一些用于操作队列的方法。Queue 接口提供了一种在队尾插入元素,在队首移除元素的方式。
         从数据结构的角度来看,Queue 可以被看作是一个线性表,具有两个端点:队尾和队首。新元素被添加到队尾,而老元素则从队首被移除。这样保证了先进队列的元素会先被移出,实现了 FIFO 的特性。
除了继承自 Collection 接口的方法外,Queue 接口还定义了几个重要的方法,包括:

  1. add(element):将指定的元素插入到队尾,如果成功则返回 true,如果队列已满则抛出异常。
  2. offer(element):将指定的元素插入到队尾,如果成功则返回 true,如果队列已满则返回 false。
  3. remove():移除并返回队首的元素,如果队列为空则抛出异常。
  4. poll():移除并返回队首的元素,如果队列为空则返回 null。
  5. element():返回队首的元素,但不移除它,如果队列为空则抛出异常。
  6. peek():返回队首的元素,但不移除它,如果队列为空则返回 null。

这里我们通过 remove() 方法和 poll() 方法,使用代码去更加直观的理解用法。帮助大家记忆他们的区别。


一、poll()方法使用及特点

1.1 使用

具体来说,下述代码的执行步骤如下:

  1. 创建一个 Queue 实例 queue,使用 LinkedList 类作为其具体的实现。
  2. 使用 offer() 方法向队列中添加三个元素 “A”、“B” 和 “C”。
  3. 使用 poll() 方法逐个取出并打印队列中的元素。首先打印出 “A”,然后 “B”,最后 “C”。
  4. 在进一步的尝试取出元素时,由于队列已经为空,所以会返回 null,并打印出 null。
Queue<String> queue = new LinkedList<>();

// 向队列中添加元素
queue.offer("A");
queue.offer("B");
queue.offer("C");

// 使用 poll() 方法
System.out.println("Using poll():");
while (!queue.isEmpty()) {
    System.out.println(queue.poll());
}
System.out.println(queue.poll());

1.2 特点

如果队列为空,则返回 null。否则,返回队首的元素并将其从队列中移除。
效果图如下:
在这里插入图片描述

1.3 注意点

在该示例中,我们在使用 poll() 方法之前先判断队列是否为空,以确保在取出元素之前不会发生异常。这是一个良好的编程习惯,可以避免在空队列上调用 poll() 方法时出现异常。
代码如下:

if(!queue.isEmpty()){
   System.out.println(queue.poll());
}

二、remove()使用及特点

2.1 使用

具体代码执行步骤如下:

  1. 创建一个 Queue 实例 queue,使用 LinkedList 类作为其具体的实现。
  2. 使用 offer() 方法向队列中添加三个元素 “X”、“Y” 和 “Z”。
  3. 使用 remove() 方法逐个取出并打印队列中的元素。首先打印出 “X”,然后 “Y”,最后 “Z”。
  4. 在进一步的尝试取出元素时,由于队列已经为空,所以会抛出 NoSuchElementException 异常,因为在空队列上调用 remove() 方法会出现异常。
 Queue<String> queue = new LinkedList<>();
// 再次向队列中添加元素
 queue.offer("X");
 queue.offer("Y");
 queue.offer("Z");

 // 使用 remove() 方法
 System.out.println("Using remove():");
 while (!queue.isEmpty()) {
     System.out.println(queue.remove());
 }
 queue.remove();

2.2 特点

由于队列已经为空,所以会抛出 **NoSuchElementException** 异常,因为在空队列上调用 remove() 方法会出现异常。
效果图:
在这里插入图片描述

2.3 注意点

在开发时如果使用remove去移出队列的元素,需注意空队列的情况,最好使用try_catch包裹代码
如下:

try {
    queue.remove();
} catch (Exception e) {
    System.out.println("队列为空,不能使用.remove()移出元素");
}

总结

         当我们使用 poll() 方法时,如果队列为空,返回 null 的设计是为了让程序员能够更容易地处理空队列的情况,避免了抛出异常需要额外的异常处理代码;而使用 remove() 方法时,如果队列为空,抛出 NoSuchElementException 异常则是因为队列为空可能代表了某种意外情况,需要引起程序员的注意并进行相应的处理,例如程序员可能没有预料到队列为空的情况,或者队列为空时并不应该执行特定的操作。
         因此,poll() 方法返回 null 是一种更加灵活、容错性更强的设计,可以让程序员更容易地处理空队列的情况;而 remove() 方法抛出 NoSuchElementException 则是为了提醒程序员在使用该方法时要注意队列是否为空,以防止可能的错误行为。
         总的来说,Java 设计者在设计这两个方法时考虑了程序员的使用习惯和便利性,使得程序员在处理队列为空的情况时能够更加方便、安全地编写代码。

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

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

相关文章

k8s-docker二进制(1.28)的搭建

二进制文件-docker方式 1、准备的服务器 角色ip组件k8s-master1192.168.11.111kube-apiserver,kube-controller-manager,kube-scheduler,etcdk8s-master2192.168.11.112kube-apiserver,kube-controller-manager,kube-scheduler,etcdk8s-node1192.168.11.113kubelet,kube-prox…

【Data Grip】数据库和表的创建

目录 1.数据库的创建 2.表的创建 Data Grip 是一款数据管理工具 1.数据库的创建 点击ok 创建完成 2.表的创建 比如创建一个student表 字段名有 id name age gender grade 填写表名之后&#xff0c;右键columns添加字段 搞定id字段&#xff0c;继续右键columns 创…

vnpy_ctp源码下载后转变为python可用的处理过程

目录 写在前面 下载源码并解压 创建python项目 环境 过程 编译vnpy_ctp源码 验证可用性 写在前面 window系统中必须安装有Visual Studio ,后面源码安装时需要进行C编译 下载源码并解压 GitHub - vnpy/vnpy_ctp: VeighNa框架的CTP交易接口 下载zip压缩包 解压 要在…

基于YOLOV8+移动窗口切片(完整版)+OnnxRuntime+KMeans+Zbar+传统图像处理算法的大图片小目标光伏产线条码检测研究

文章目录 前言1 项目背景2 训练YOLOV8的一维码检测模型3 读取测试图片3.1 调整首窗口位置4 创建滑动窗口,窗口大小为(640,640),移动距离为160,对不足(640,640)的窗口进行填充5 创建Onnxruntime推理引擎并测试5.1推理测试5.2获得ONNX模型输入层(输出层)和数据维度5.3 …

C++20 Text formatting

C20 Text formatting 格式化字符串&#xff0c; 和 python 类似。 std::formatter - cppreference.com string — Common string operations — Python 3.12.0 documentation 新格式库位于 <format> 头文件中。格式库基于 Python3 中的 str.format() 方法建模。格式…

划分VOC数据集,以及转换为划分后的COCO数据集格式

1.VOC数据集 LabelImg是一款广泛应用于图像标注的开源工具&#xff0c;主要用于构建目标检测模型所需的数据集。Visual Object Classes&#xff08;VOC&#xff09;数据集作为一种常见的目标检测数据集&#xff0c;通过labelimg工具在图像中标注边界框和类别标签&#xff0c;为…

MySQL单表过大、主从模式、同步模式优化原理

文章目录 MYSQL单表数据达2000万性能严重下降?前言InnoDB索引数据结构B树 Sharding Sphere分库分表Sharding-JDBCSharding-JDBC的相关概念说明逻辑表广播表绑定表 Sharding-JDBC中的分片策略自动分片算法取模分片算法哈希取模分片算法分片容量范围标准分片算法行表达式分片算法…

第1章 现代通信网概述

文章目录 1.1 通信网的定义1.2 通信网的分类1.3 通信网的结构1.4 通信网的质量要求 1.1 通信网的定义 1.1.1 通信系统 1.1.2 通信网的定义 通信网是由一定数量的节点 (包括终端节点、交换节点) 和连接这些节点的传输链路有机地组织在一起&#xff0c;以实现两个或多个规…

JWFD开源工作流-随机函数发生器最新进展

使用WIN7 32位&#xff0c;JDK1.8平台&#xff0c;跑语法分析&#xff0c;实测结果如上图&#xff0c;比JDK1.6的每个函数计算速度快了不止100倍&#xff0c;升级为JDK1.8是正确的选择&#xff0c;这个模块是典型的变形函数计算单元&#xff0c;可以解决很多需要动态变形物理模…

阿里云竞争加剧,腾讯云双十一服务器优惠力度爆表!

腾讯云对于新客户和老客户都有相互照顾的优惠力度。特别是在今年的双十一活动中&#xff0c;腾讯云推出了一系列的优惠活动。首先&#xff0c;轻量服务器和云服务器产品的首购活动中&#xff0c;三年的云服务器仅需540元&#xff0c;这是一个非常低廉的价格。其次&#xff0c;香…

linux下俺安Anaconda

文章目录 一、linux下安装anaconda1 下载anaconda的安装包2 安装anaconda3设置环境变量4完成安装以及检测是否安装成功 二、linux下配置并运行![在这里插入图片描述](https://img-blog.csdnimg.cn/30a818b7a0b24d81aceef93e2d365b7e.png)1、一般情况下&#xff0c;anaconda中默…

标本传送设备物联网应用案例|蓝蜂物联网一体化方案

标本传送设备物联网应用案例 标本传输系统被大量应用到现代医院场景中&#xff0c;系统各个设备的运行情况直接影响到整个医院系统的正常稳定&#xff0c;所以对于标本传输系统的实时监控和及时运维是维持医院稳定和规避风险的重中之重。 针对标本传输系统应用过程中的数据统…

HTML5学习系列之简单使用1

HTML5学习系列之简单使用1 前言基础显示学习定义网页标题定义网页元信息定义网页元信息定义文档结构div元素di和classtitlerole注释 总结 前言 下班加班期间的简单学习。 基础显示学习 定义网页标题 <html lang"en"> <head> <title>从今天开始努…

WPS的JS宏基础(二)

数据的输入和输出 InputBox(‘请输入内容’) //输入框 alert(‘a’) //简单消息框 MsgBox(‘b’) //进阶消息框 Debug.Print(‘c’) //立即窗口 Console.log(‘d’) //立即窗口 编写规则与注释 1.严格遵循大小写规范 2.每条语句之间用分号分隔 3.复合语句块&#xff08;块中…

Ionic组件 ion-list ion-list-header

1 ion-list 列表由多行项目组成&#xff0c;这些项目可以包含 text, buttons, toggles, icons, thumbnails等。列表通常包含具有类似数据内容的项目&#xff0c;如 images and text。 列表支持多种交互&#xff0c;包括滑动项目以显示选项、拖动以重新排列列表中的项目以及删除…

无线充,大功率小家电,智能家居,无人机快速充电等产品供电 LDR6328S芯片TYUPE-C PD诱骗电压 USB-C解决PD电源取电问题

LDR6328S 是乐得瑞科技有限公司开发的一款兼容 USB PD、QC 和 AFC 协议的 Sink 控制器。 LDR6328S 从支持 USB PD、QC 和 AFC 协议的适配器取电&#xff0c;然后供电给设备。比如可以配置适配器输 出需要的功率&#xff0c;给无线充电器设备供电。LDR6328S 也兼容传统 USB 电源…

【算法与数据结构】40、LeetCode组合总和 II

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;【算法与数据结构】39、LeetCode组合总和的基础之上&#xff0c;这道题变成了candidates中有重复元素&…

Bytebase 2.11.0 - 支持 OceanBase Oracle 模式

&#x1f680; 新功能 支持 OceanBase Oracle 模式。支持设置 MySQL 在线变更参数。新增项目数据库查看者的角色。 &#x1f384; 改进 支持在项目中直接选择所有用户并为之添加角色。 调整了项目页面的布局。在 SQL 编辑器中通过悬浮面板展示表和列的详情。 &#x1faa6; …

弹性布局display:flex

弹性布局display:flex 一、弹性布局的特点二、容器的属性1、justify-content1.1 justify-content: center 居中1.2 justify-content: flex-start&#xff08;默认值&#xff09;&#xff1a;左对齐1.3 justify-content: flex-end 右对齐1.4 justify-content:space-between 两端…

第四季度净利润扭亏为盈,迪士尼的流媒体终于成功了?

对于一直关注迪士尼的投资者来说&#xff0c;眼下最关心的问题只有一个——迪士尼转行流媒体成功了吗&#xff1f; 而对于这一问题答案&#xff0c;或许可以从迪士尼最新发布的财报中找到。11月9日&#xff0c;华特迪士尼公布了截至2023年9月30日的第四季度和全年收益。其中&a…