Java集合——10.使用Queue
Java中Queue队列
在Java集合框架中,Queue(队列)是一种遵循先进先出(FIFO,First In First Out) 原则的有序集合。它与List的最大区别在于操作的限制性:List允许在任意位置添加或删除元素,而Queue仅支持在队尾添加元素、从队首获取元素。
Queue的常用操作
Queue接口定义了一套规范的操作方法,可分为两类:操作失败时抛出异常和操作失败时返回特定值。
| 操作类型 | 抛出异常的方法 | 返回false或null的方法 |
|---|---|---|
| 向队尾添加元素 | add(E e) |
boolean offer(E e) |
| 从队首获取并删除元素 | E remove() |
E poll() |
| 从队首获取但不删除元素 | E element() |
E peek() |
| 获取队列长度 | int size() |
- |
方法解析
添加元素
add(E e):当队列有容量限制且已满时,会抛出IllegalStateException;offer(E e):添加失败时返回false(如队列已满),更适合处理可能失败的场景。
示例:
Queue<String> queue = new LinkedList<>();
// 使用add()添加元素(可能抛异常)
try {
queue.add("任务1");
System.out.println("添加成功");
} catch (IllegalStateException e) {
System.out.println("添加失败:队列已满");
} // 使用offer()添加元素(返回布尔值)
if (queue.offer("任务2")) {
System.out.println("添加成功");
} else {
System.out.println("添加失败:队列已满");
}
获取并删除元素
remove():当队列为空时,抛出NoSuchElementException;poll():当队列为空时,返回null,需注意避免向队列中添加null元素,否则无法区分“空队列”和“元素为null”。
示例:
// 使用remove()获取元素(可能抛异常)
try {
String task = queue.remove();
System.out.println("处理任务:" + task);
} catch (NoSuchElementException e) {
System.out.println("获取失败:队列为空");
} // 使用poll()获取元素(返回null表示失败)
String nextTask = queue.poll();
if (nextTask != null) {
System.out.println("处理任务:" + nextTask);
} else {
System.out.println("获取失败:队列为空");
}
获取但不删除元素
element():队列为空时抛出NoSuchElementException;peek():队列为空时返回null,常用于查看队首元素而不改变队列状态。
示例:
// 查看队首元素(不删除)
System.out.println("当前队首任务:" + queue.peek()); // 多次调用结果相同
Queue的实现类与使用场景
Queue是接口,需通过具体实现类使用,最常用的是LinkedList(同时实现了List和Queue接口)。使用时应遵循“面向抽象编程”原则,声明为Queue类型以明确用途:
// 声明为Queue类型,强调队列特性
Queue<String> queue = new LinkedList<>();
总结
- 避免添加null元素:
poll()和peek()返回null时,无法区分“队列为空”和“元素是null”,可能导致逻辑错误; - 选择合适的方法:优先使用
offer()、poll()、peek(),它们通过返回值而非异常处理失败,更适合大多数场景; - 明确实现类特性:不同
Queue实现类(如LinkedList、ArrayBlockingQueue)有不同特性(如是否有容量限制),需根据需求选择。
Java集合——10.使用Queue的更多相关文章
- java 集合 队列(Queue)
特点:特殊线性表,先进先出(FIFO first-in-first-out) 方法: java5中 添加java.util.Queue接口,java.util.Collection 的扩展类 add( ...
- Java 集合深入理解(9):Queue 队列
点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 今天心情不太好,来学一下 List 吧! 什么是队列 队列是数据结构中比较重要的一种类型,它支持 FIFO,尾部添加.头部 ...
- java集合树状结构及源码
java集合树状结构及源码 最近一直想看一下java集合的源码,毕竟平时用的比较多,但总是感觉是跟着习惯new出来一个对象,比如ArrayList,HashMap等等,所以就简单的看了一下,了解了一下 ...
- Java集合(一):Java集合概述
注:本文基于JDK 1.7 1 概述 Java提供了一个丰富的集合框架,这个集合框架包括了很多接口.虚拟类和实现类. 这些接口和类提供了丰富的功能.可以满足主要的聚合需求. 下图就是这个框架的总体结构 ...
- day27--Java集合10
Java集合10 21.集合家庭作业 21.1Homework01 按要求实现: 封装一个新闻类,包括标题和内容属性,提供get.set方法,重写toString方法,打印对象时只打印标题: 只提供一 ...
- Java集合的Stack、Queue、Map的遍历
Java集合的Stack.Queue.Map的遍历 在集合操作中,常常离不开对集合的遍历,对集合遍历一般来说一个foreach就搞定了,但是,对于Stack.Queue.Map类型的遍历,还是有一 ...
- 【由浅入深理解java集合】(四)——集合 Queue
今天我们来介绍下集合Queue中的几个重要的实现类.关于集合Queue中的内容就比较少了.主要是针对队列这种数据结构的使用来介绍Queue中的实现类. Queue用于模拟队列这种数据结构,队列通常是指 ...
- Java集合—Queue(转载)
Queue用于模拟队列这种数据结构,队列通常是指“先进先出”(FIFO)的容器.新元素插入(offer)到队列的尾部,访问元素(poll)操作会返回队列头部的元素.通常,队列不允许随机访问队列中的元素 ...
- Java 集合系列10之 HashMap详细介绍(源码解析)和使用示例
概要 这一章,我们对HashMap进行学习.我们先对HashMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashMap.内容包括:第1部分 HashMap介绍第2部分 HashMa ...
- Java 集合系列 10 Hashtable详细介绍(源码解析)和使用示例
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
随机推荐
- ActiveMQ的安装与部署
ActiveMQ是Apache的一个开源项目,它是一个功能强劲的开源消息总线,也是一个中间件产品,它是JMS的一个实现. 在介绍ActiveMQ之前,先来复习一下J2EE中的JMS规范.JM ...
- Python基础—初识函数(二)
1.给函数参数增加元信息 写好一个函数,然后想为这个函数的参数增加一些额外的信息,这样的话其他使用者就能清楚的知道这个函数应该怎么使用. 使用函数参数注解是一个很好的办法,它能提示程序员应该怎样正确使 ...
- 一则复杂 SQL 改写后有感
抱歉很久没写技术博客. 自从LLM爆发之后,写概念堆叠的所谓"博客"已经没有意义了,那么我会思考我的博客还有什么作用. 得出的结论是:具体业务的讨论仍然是有价值的 所以之后会随缘更 ...
- C#实现语音预处理:降噪、静音检测、自动增益(附Demo源码)
无论是在音视频录制系统,还是音视频通话系统.或视频会议系统中,对从麦克风采集到的说话的声音数据进行预处理,都是是非常必要的. 语音数据预处理主要包括:降噪(Noise Reduction).静音检 ...
- DotTrace系列:6. 程序异常诊断 和 Request慢处理
一:背景 1. 讲故事 在我分析的众多dump中,有一些CPU爆高是因为高频的抛 Exception 导致,比如下面这张图,有 19 个线程都在抛 xxxResultException 异常. 从卦中 ...
- Java实现word试卷逐题录入数据库
word题目类似如图 将这样一份试题录入数据库实现如下图效果(给app 考试系统 写的java后台) 主要思路是 1.把word文档整理成你想要的格式,让每道题格式一样 2.字符串形式获得word文档 ...
- .NET周刊【6月第4期 2025-06-22】
国内文章 推荐 3 种 .NET Windows 桌面应用程序自动更新解决方案 https://www.cnblogs.com/Can-daydayup/p/18927721 本文介绍了在快速迭代的软 ...
- 前端开发系列083-Node篇之http
本文对Node的内置模块http进行介绍,包括该模块的基本情况和简单使用. 一.模块简介 http是Node的内置核心模块,包含了对HTTP处理的封装. 在Nodejs文件中可以直接在代码里通过var ...
- MySQL 13 为什么表数据删掉一半,表文件大小不变?
一个InnoDB表包含两部分:表结构定义和数据.在MySQL 8.0版本前,表结构存在以.frm为后缀的文件里.之后的版本允许把表结构定义放在系统数据表中.由于表结构定义占用空间很小,所以主要讨论表数 ...
- Gym - 101147 & 队内自训#2 题解
A - The game of Osho 题意:每次给你G堆石子,每堆有\(n{_i}\)个,一次可挑走\(B{_i}^k\)个.最后不能选的人输.问最后先手赢还是后手赢. 思路:从SG表的方式入手. ...