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

系列文章目录

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.mzph.cn/news/136877.shtml

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

相关文章

使用EvoMap/Three.js模拟无人机灯光秀

一、创建地图对象 首先我们需要创建一个EM.Map对象&#xff0c;该对象代表了一个地图实例&#xff0c;并设置id为"map"的文档元素作为地图的容器。 let map new EM.Map("map",{zoom:22.14,center:[8.02528, -29.27638, 0],pitch:71.507,roll:2.01,maxPit…

代码随想录算法训练营Day 47 || 198.打家劫舍、213.打家劫舍II、337.打家劫舍 III

198.打家劫舍 力扣题目链接(opens new window) 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系…

【Cheat Engine7.5】基础教程第三关(步骤4)

文章目录 一、简介二、操作步骤2.1、加载进程2.2、查找健康数据2.2.1、首次扫描(单浮点数100)2.2.2、点击打我&#xff0c;再次扫描数值97.112.2.3、修改数据值为50002.2.4、测试正常 2.3、查找弹药数据2.3.1、双浮点数1002.3.2、点击开火2.3.3、修改数据2.3.4、测试 2.4、通关…

微头条项目实战:通过postman测试登录验证请求

1、CrosFilter package com.csdn.headline.filters; import jakarta.servlet.*; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; public class CrosFilter implements Filter {/*** 过滤器方法&#xff0c;用于处理HTTP请求* param servletReq…

674. 最长连续递增序列 718. 最长重复子数组 1143.最长公共子序列 1035.不相交的线

674. 最长连续递增序列 题目&#xff1a; 给定一个未经排序的整数数组nums&#xff0c;找到最长且 连续递增的子序列&#xff0c;并返回该序列的长度。 dp数组含义&#xff1a; dp[i]&#xff1a;以下标i为结尾的连续递增的子序列长度为dp[i]。 递推公式&#xff1a; 怎么…

ai 问答时刻

妙啊 这很快 相当棒

希尔排序原理

目录&#xff1a; 一、希尔排序与插入排序 1&#xff09;希尔排序的概念 2&#xff09;插入排序实现 二、希尔排序实现 一、希尔排序与插入排序 1&#xff09;希尔排序的概念 希尔排序(Shells Sort)是插入排序的一种又称“缩小增量排序”&#xff08;Diminishing Incremen…

景区数字化营销怎么做?景区数字化营销优势

随着社会信息化、数字化趋势的不断加强&#xff0c;数字营销逐渐成为景区营销的重要方式之一。借助如蚓链数字化文旅营销系统&#xff0c;能够帮助景区提高知名度&#xff0c;吸引更多游客&#xff0c;同时也能够提高景区管理效率&#xff0c;降低人力成本。景区数字化营销有哪…

Go-服务注册和发现,负载均衡,配置中心

文章目录 什么是服务注册和发现技术选型 Consul 的安装和配置1. 安装2. 访问3. 访问dns Consul 的api接口go操作consulgrpc下的健康检查grpc的健康检查规范动态获取可用端口号 负载均衡策略1. 什么是负载均衡2. 负载均衡策略1. 集中式load balance2. 进程内load balance3. 独立…

图像二值化阈值调整——Triangle算法,Maxentropy方法

一. Triangle方法 算法描述&#xff1a;三角法求分割阈值最早见于Zack的论文《Automatic measurement of sister chromatid exchange frequency》主要是用于染色体的研究&#xff0c;该方法是使用直方图数据&#xff0c;基于纯几何方法来寻找最佳阈值&#xff0c;它的成立条件…

【AI】自回归 (AR) 模型使预测和深度学习变得简单

自回归 (AR) 模型是统计和时间序列模型&#xff0c;用于根据数据点的先前值进行分析和预测。这些模型广泛应用于各个领域&#xff0c;包括经济、金融、信号处理和自然语言处理。 自回归模型假设给定时间变量的值与其过去的值线性相关&#xff0c;这使得它们可用于建模和预测时…

Oracle11g for centos7

准备工作 x86 centos7 oracle11G 环境搭建 配置好虚拟机&#xff0c;网络通畅&#xff0c;建议最少3G内存。 安装依赖 yum install binutils compat-libstdc-33 glibc* ksh gcc gcc-c libgcc libstdc* libaio libaio-devel libXext libX11 libXau libxcb libXi make sy…

蓝桥杯每日一题2023.11.8

题目描述 题目分析 对于输入的abc我们可以以a为年也可以以c为年&#xff0c;将abc,cab,cba这三种情况进行判断合法性即可&#xff0c;注意需要排序去重&#xff0c;所以考虑使用set 此处为纯模拟的写法&#xff0c;但使用循环代码会更加简洁。 方法一&#xff1a; #include&…

【MongoDB-Redis-MySQL-Elasticsearch-Kibana-RabbitMQ-MinIO】Java全栈开发软件一网打尽

“Java全栈开发一网打尽&#xff1a;在Windows环境下探索技术世界的奇妙之旅” 前言 全栈开发是一项复杂而令人兴奋的任务&#xff0c;涵盖了从前端到后端、数据库到可视化层、消息队列到文件存储的广泛领域。本文将带您深入探讨在Windows环境下进行全栈开发的过程&#xff0…

Kafka JNDI 注入分析(CVE-2023-25194)

Apache Kafka Clients Jndi Injection 漏洞描述 Apache Kafka 是一个分布式数据流处理平台&#xff0c;可以实时发布、订阅、存储和处理数据流。Kafka Connect 是一种用于在 kafka 和其他系统之间可扩展、可靠的流式传输数据的工具。攻击者可以利用基于 SASL JAAS 配置和 SAS…

02-PostgreSQL的基本使用

一、数据库操作 ①: 登录到数据库 psql -U postgres -d postgres -h 127.0.0.1②:查看所有数据库 \l③: 创建数据库 # 创建一个名为 mydb 的数据库 create database mydb;④:切换数据库 # \c 数据库名 \c mydb⑤:删除数据库 # 删除前 先确保数据库没有被连接 drop databa…

Linux学习笔记之五(父子进程、孤儿进程、僵尸进程、守护进程)

Linux 1、进程1.1、进程的六种状态1.2、创建子进程1.3、添加子进程任务1.4、孤儿进程、僵尸进程、守护进程1.4.1、避免僵尸进程1.4.2、创建守护进程1.4.3、杀死守护进程 1.5、综合练习 1、进程 进程可以简单的理解为一个正在执行的程序&#xff0c;它是计算机系统中拥有资源和…

小红书母婴博主投放技巧是什么,怎么避免无用功

如今&#xff0c;随着互联网的发展&#xff0c;母婴博主和社交媒体成为了很多妈妈们&#xff0c;获取育儿知识和建立社交圈的重要途径。今天为大家分享下小红书母婴博主投放技巧是什么&#xff0c;怎么避免无用功&#xff01; 一、优质的母婴博主在哪里 我们都知道&#xff0c;…

数据中台之数据分析

效果界面 技术方案 Notebook集成 在您的数据平台上,创建一个能够与Jupyter Notebook通讯的服务。通过Jupyter Notebook的HTTP API与Notebook实例进行交互,执行代码、获取输出等。用户界面 在数据开发/数据分析的代码框右上方,添加一个机器人样式的图标,用户点击后可以调起…

verdi如何打开时可以加载配置比如字体

打开tcl使能 找到配置字体的命令 其实其他有需要的文件配置都可以在这里找到对应的指令 存储文件 新建verdi001.tcl文件 输入想要调整的字体以及大小 verdiSetFont -font "Bitstream Vera Sans" -size "18" verdiSetFont -monoFont "Courier&q…