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

java基础-Java Queue 接口

Queue 是 Java 集合框架中的一个重要接口,位于java.util包中,它表示一个先进先出(FIFO)的队列数据结构。Queue 接口继承了 Collection 接口,并定义了一组专门用于队列操作的方法。

Queue 接口的主要特点

  1. 先进先出(FIFO):元素按照添加顺序被移除
  2. 可选操作:某些方法可能抛出异常或返回特殊值
  3. 双端队列支持:可以通过 Deque 接口实现双端队列功能

主要方法

1. 插入操作

  • boolean add(E e)- 添加元素,如果队列已满则抛出异常

  • boolean offer(E e)- 添加元素,如果队列已满返回 false

2. 移除操作

  • E remove()- 移除并返回队首元素,如果队列为空则抛出异常

  • E poll()- 移除并返回队首元素,如果队列为空返回 null

3. 检查操作

  • E element()- 返回队首元素但不移除,如果队列为空则抛出异常

  • E peek()- 返回队首元素但不移除,如果队列为空返回 null

常用实现类

Java 提供了多个 Queue 接口的实现类:

  1. LinkedList:实现了 List 和 Deque 接口,可以作为队列使用

    import java.util.LinkedList; import java.util.Queue; Queue<String> queue = new LinkedList<>(); queue.add("A"); queue.add("B"); queue.add("C"); System.out.println(queue.poll()); // 输出: A System.out.println(queue.peek()); // 输出: B
  2. PriorityQueue:基于优先级堆的无界优先级队列

    import java.util.PriorityQueue; import java.util.Queue; Queue<Integer> priorityQueue = new PriorityQueue<>(); priorityQueue.offer(5); priorityQueue.offer(1); priorityQueue.offer(3); // 元素按优先级顺序出队 while (!priorityQueue.isEmpty()) { System.out.println(priorityQueue.poll()); // 输出: 1, 3, 5 }
  3. ArrayDeque:基于数组的双端队列实现

    import java.util.ArrayDeque; import java.util.Queue; Queue<String> deque = new ArrayDeque<>(); deque.offer("X"); deque.offer("Y"); deque.offer("Z"); System.out.println(deque.poll()); // 输出: X
  4. ConcurrentLinkedQueue:线程安全的无界非阻塞队列

    Queue<String> concurrentQueue = new ConcurrentLinkedQueue<>();
  5. BlockingQueue 接口的实现(如 ArrayBlockingQueue, LinkedBlockingQueue):线程安全的有界阻塞队列

使用示例

import java.util.LinkedList; import java.util.Queue; public class QueueExample { public static void main(String[] args) { // 创建队列 Queue<String> queue = new LinkedList<>(); // 添加元素 queue.add("First"); queue.offer("Second"); // 查看头部元素 System.out.println("Head of queue: " + queue.peek()); // 移除元素 System.out.println("Removed: " + queue.remove()); System.out.println("Removed: " + queue.poll()); // 检查队列是否为空 System.out.println("Is queue empty? " + queue.isEmpty()); } }

与 Deque 接口的关系

Deque(双端队列)接口扩展了 Queue 接口,提供了在队列头部和尾部都能进行插入和删除操作的方法。常用的实现类有 ArrayDeque 和 LinkedList。

阻塞队列

Java 还提供了 BlockingQueue 接口(在 java.util.concurrent 包中),它支持阻塞操作,常用于生产者-消费者模式:

import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; public class BlockingQueueExample { public static void main(String[] args) { BlockingQueue<Integer> blockingQueue = new ArrayBlockingQueue<>(10); // 生产者线程可以调用 put() 方法,如果队列满则阻塞 // 消费者线程可以调用 take() 方法,如果队列空则阻塞 } }

使用场景

  1. 任务调度- 处理等待执行的任务

  2. 消息传递- 在生产者-消费者模式中传递消息

  3. 广度优先搜索- 在图算法中使用

  4. 缓存系统- 实现 LRU 缓存

  5. 事件处理- 处理用户界面事件

注意事项

  • 选择适合的实现类:LinkedList 通用,PriorityQueue 需要排序,ArrayDeque 性能更好

  • 线程安全:普通队列非线程安全,需要线程安全时使用ConcurrentLinkedQueue或阻塞队列

  • 空值处理:某些实现(如 PriorityQueue)不允许 null 元素

Queue 接口为处理先进先出的数据提供了统一的规范,是 Java 集合框架中非常重要的组成部分。

http://www.jsqmd.com/news/78833/

相关文章:

  • 基于微信小程序的民宿预订系统的设计与实现(源码+论文+部署+安装)
  • 品牌营销的“防AI雷区”:MyDetector如何让你的文案和图片双保险
  • 基于Java+ vue健身房管理系统(源码+数据库+文档)
  • 对比传统分库分表:Sharding-JDBC效率提升300%的秘密
  • 如何快速掌握正点原子串口调试助手:嵌入式开发的终极指南
  • 富有的哈佛人 —— 储蓄:财富积累的第一块基石
  • 西安电子科技大学专属信纸模板:3分钟打造专业学术形象
  • 基于微信小程序的学生评教系统【源码文末联系】
  • 1小时搭建数据库性能测试原型:Sysbench快速验证
  • Rubberduck终极指南:快速提升VBA开发效率的完整解决方案
  • OpenFE项目架构解析与快速入门指南
  • 《Light Sci. Appl.》研究:TFLN平台FDML OEO实现159054时间带宽积,推动雷达与通信系统演进
  • AI如何帮你快速搭建Linux Docker环境
  • 办公效率神器!四合一工具让文件处理超简单
  • LangChain-ChatChat:AI如何重构智能对话开发流程
  • CI/CD效率革命:传统3天 vs AI辅助3分钟的对比实验
  • 把钱交给理财专家 —— 基金:普通人的财富增值捷径
  • AI如何帮你自动解压文件?快马平台一键生成unzip脚本
  • 深空摄影神器DeepSkyStacker:揭秘多曝光星图堆栈的魔法
  • 5分钟快速验证SM4加密方案的密钥生成原型
  • AI如何智能切换编程语言环境:Cursor中文输入实战
  • 技术标准化的AI元人文升级:从医疗AI合规到全域可靠性
  • Spyder实战:从零搭建金融数据分析平台
  • Termshark终端网络分析入门指南:5个实用技巧快速上手
  • 新手友好教程,手把手教你理解和使用SM4算法的核心要素。
  • Ubuntu24.04 安装rime中文输入法
  • 三相L型并网逆变器:dq坐标系下的控制系统设计与Simulink仿真模型搭建
  • AI如何帮你解决Spring的@Autowired依赖注入问题
  • Arthas版本管理全攻略:Java诊断工具的版本控制技巧
  • 15分钟开发:Windows更新清理工具原型开发实录