news 2026/5/14 2:23:06

Java 队列接口

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java 队列接口

一、Queue 接口核心概念

Queue是 Java 集合框架(java.util包)中的一个接口,专门用于模拟 “先进先出(FIFO)” 的队列结构,就像日常生活中排队买票 —— 先到的人先买,后到的人排后面。

  • 它继承自Collection接口,所以拥有 Collection 的通用方法(如size()isEmpty())。
  • 核心设计目标:处理 “等待 / 排队” 类场景(如线程池任务排队、消息队列)。

二、Queue 接口核心方法

Queue 定义了两组功能相似的方法(区别在于:操作失败时,一组抛异常,一组返回特殊值),新手优先记 “抛异常” 的核心方法即可:

操作类型抛异常(推荐新手用)返回特殊值(无元素时返回 null/false)说明
入队(添加元素到队尾)add(E e)offer(E e)队列满时,add 抛IllegalStateException,offer 返回 false
出队(移除队首元素)remove()poll()队列为空时,remove 抛NoSuchElementException,poll 返回 null
查看队首元素(不移除)element()peek()队列为空时,element 抛NoSuchElementException,peek 返回 null

三、常用实现类(新手必知)

Queue 是接口,不能直接实例化,实际开发中常用以下实现类:

  1. LinkedList
    • 基于链表实现,支持队列 + 双端队列(Deque),非线程安全。
    • 最常用的 Queue 实现,适合普通场景(如业务层临时排队)。
  2. ArrayDeque
    • 基于数组实现,比 LinkedList 更快(数组访问效率高),非线程安全。
    • 适合高性能的队列 / 栈场景。
  3. PriorityQueue
    • 优先级队列(打破 FIFO),元素按优先级排序(默认升序),非线程安全。
    • 比如:任务队列中 “高优先级任务先执行”。
  4. BlockingQueue(子接口)
    • 阻塞队列,线程安全,核心用于多线程场景(如线程池)。
    • 常用实现:ArrayBlockingQueueLinkedBlockingQueue

四、实战代码示例(新手可直接运行)

java

运行

import java.util.LinkedList; import java.util.Queue; public class QueueDemo { public static void main(String[] args) { // 1. 创建Queue实例(用LinkedList实现) Queue<String> queue = new LinkedList<>(); // 2. 入队(添加元素) queue.add("用户1"); // 抛异常版 queue.offer("用户2"); // 返回值版 queue.offer("用户3"); System.out.println("初始队列:" + queue); // 输出:[用户1, 用户2, 用户3] // 3. 查看队首元素(不移除) String head = queue.element(); System.out.println("队首元素:" + head); // 输出:用户1 // 4. 出队(移除队首元素) String removeUser = queue.remove(); System.out.println("出队元素:" + removeUser); // 输出:用户1 System.out.println("出队后队列:" + queue); // 输出:[用户2, 用户3] // 5. 判空+遍历 while (!queue.isEmpty()) { System.out.println("遍历出队:" + queue.poll()); } // 最终输出:遍历出队:用户2 遍历出队:用户3 } }

五、优先级队列示例(打破 FIFO)

java

运行

import java.util.PriorityQueue; import java.util.Queue; public class PriorityQueueDemo { public static void main(String[] args) { // 优先级队列(默认整数升序) Queue<Integer> priorityQueue = new PriorityQueue<>(); priorityQueue.offer(5); priorityQueue.offer(1); priorityQueue.offer(3); // 出队顺序:1 → 3 → 5(按优先级,而非添加顺序) while (!priorityQueue.isEmpty()) { System.out.println(priorityQueue.poll()); } } }

总结

  1. 核心特性:Queue 接口主打 “先进先出”,提供入队、出队、查队首三类核心方法,分 “抛异常” 和 “返回特殊值” 两种风格。
  2. 常用实现:普通场景用LinkedList,高性能场景用ArrayDeque,优先级场景用PriorityQueue,多线程场景用BlockingQueue子类。
  3. 关键区别remove()/element()操作空队列会抛异常,poll()/peek()返回 null,实际开发中根据是否需要捕获异常选择。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 1:06:42

Vue3 系列教程(三)插值表达式与常用文本指令

前言 第2课已掌握Vue3应用的创建、挂载及单文件组件的基础结构&#xff0c;本课将聚焦Vue3中最基础的页面渲染方式——插值表达式与文本指令&#xff0c;理解不同文本渲染方式的使用规则与适用场景&#xff0c;掌握基础数据到页面的渲染逻辑&#xff0c;为后续动态数据展示打下…

作者头像 李华
网站建设 2026/5/11 2:17:56

宏智树AI数据分析:把原始数据变成论文硬核实证,小白也能玩转

作为深耕论文写作科普的博主&#xff0c;后台最扎心的求助莫过于&#xff1a;“问卷数据堆了几百条&#xff0c;却连SPSS的界面都搞不懂”“实验数据算出来了&#xff0c;不知道怎么解读成学术结论”“用Excel画的图被导师批‘不专业’&#xff0c;重新做又无从下手”。实证类论…

作者头像 李华
网站建设 2026/5/11 2:18:20

I2C(IIC)通信协议

一、IIC的概念 IC&#xff08;Inter-Integrated Circuit&#xff09;&#xff0c;中文名为“集成电路总线”&#xff0c;是一种由 Philips 公司&#xff08;现 NXP&#xff09;在 1980 年代推出的串行通信总线协议。它广泛应用于嵌入式系统中&#xff0c;用于连接低速外设&…

作者头像 李华
网站建设 2026/5/11 2:17:42

基于深度学习与计算机视觉的高精度表格识别技术,精准识别复杂表格结构,自动输出结构化数据

在传统财务工作中&#xff0c;面对成百上千份格式各异的银行对账单、资产负债表和税务申报表&#xff0c;人工录入不仅效率低下&#xff0c;还极易引入错误。如何从非结构化或半结构化的纸质/电子文档中快速、准确地提取表格数据&#xff0c;成为企业财务数字化转型的关键瓶颈。…

作者头像 李华