当前位置: 首页 > news >正文

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,实际开发中根据是否需要捕获异常选择。
http://www.jsqmd.com/news/304398/

相关文章:

  • vue2与vue3的区别
  • 如何选择合适的Queue实现类?
  • kali基础介绍(Initial Access、Execution、Presistence)
  • invokedynamic
  • 松鼠备份使用指南
  • 简单理解:无论你写的是十进制、十六进制还是八进制,最终存储到寄存器(以及内存、CPU)中的数据,本质上都是二进制形式。
  • 简单理解:分频系数
  • 风电功率日前场景生成方法探索
  • 基于IEEE 33节点的配电网经济调度 设备包括光伏,风电,燃气轮机,柴油发电机和储能 以综合...
  • 改进A星算法,机器人路径规划导航A星算法和DWA算法融合,可以实现动态避障,有算法matlab...
  • MMC玩转指南:从零搭建20kV直流输电系统
  • 提示工程分布式架构的自动化运维:Ansible vs Terraform,批量管理节点
  • 【水下图像增强融合算法】基于融合的水下图像与视频增强研究附Matlab代码
  • Vue3 系列教程(三)插值表达式与常用文本指令
  • 大模型微调教程(一)大模型微调基础认知+零基础环境搭建
  • Finisar AOC/DAC 在高速网络互连中的应用解析
  • 完整教程:Android 宣布 Runtime 编译速度史诗级提升:在编译时间上优化了 18%
  • 2026制动改装品牌榜 CMYCH卡钳性能对比
  • Amphenol CS(High Speed IO)PCIe 与 QSFP 高速 IO 线缆设计与选型实践
  • 服务器互联中的 Amphenol ICC(FCI)电缆组件选型逻辑
  • ATGBICS 光模块兼容光缆选型与互连兼容性测试指南
  • Maxwell或者motorcad建模仿真 1、电机电磁设计仿真; 2、可提供设计报告或ans...
  • 基于SpringBoot的企业级进销存ERP系统Java源码
  • 探秘综合能源系统:供需双响应与碳交易的完美邂逅
  • 玩转风光储并网系统建模
  • 西门子plc巅峰应用,大型包膜机程序控制,常见的气缸,通讯,机械手,模拟量等,各种FB块,可用...
  • 基于hadoop的商城推荐系统 大数据个性化商城推荐 协同过滤推荐 推荐原理:每天定时更新数据集
  • 锂电池SOC估计基于二阶RC模型的扩展卡尔曼滤波估算SOC 验证工况:HPPC 和
  • 锂电池SOC估计模型SOC估算卡尔曼滤波估算SOC 各大交流论坛搜集的模型合集! 图中的12个...
  • matlab代码:基于CNN和LSTM的个体用户负荷预测方法 摘要:在本文中,我们考虑的问题是...