news 2026/6/23 15:06:24

java基础-Java Queue 接口

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 集合框架中非常重要的组成部分。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/22 21:46:17

嵌入式彩屏单色字体点阵的存储结构设计

oled320_240.j2b.json {"remark": "彩屏上单色字体图的存储结构","schema": {"MagicEnum:u32":{"0": "ascii字体图","1": "hanzi字体图","2": "icon图标图"},"Zip…

作者头像 李华
网站建设 2026/6/23 14:01:42

《Medical Vision Generalist: Unifying Medical Imaging Tasks in Context》(医学视觉通才:在上下文中统一医学成像任务)的

1. 研究背景和意义 医学图像的精确解读对于疾病的早期发现、诊断和治疗至关重要 。近年来,基于深度学习的模型在医学图像分析领域(如解剖结构分割、病灶定位、跨模态图像合成等)展现了强大的能力 。然而,现有的模型大多为“专家模型”(Specialist Models),通常针对特定…

作者头像 李华
网站建设 2026/6/23 17:37:36

西安电子科技大学专属信纸模板:3分钟打造专业学术形象

西安电子科技大学专属信纸模板&#xff1a;3分钟打造专业学术形象 【免费下载链接】西安电子科技大学专属信纸底板 西安电子科技大学专属信纸底板 项目地址: https://gitcode.com/Open-source-documentation-tutorial/4f80b &#x1f3af; 资源价值亮点 西安电子科技大…

作者头像 李华
网站建设 2026/6/23 17:36:45

富有的哈佛人 —— 储蓄:财富积累的第一块基石

富有的哈佛人 —— 储蓄&#xff1a;财富积累的第一块基石在哈佛大学的经济学课堂上&#xff0c;有一条被称为 "财富密码" 的核心原则&#xff1a;储蓄不是收入减去支出的剩余&#xff0c;而是支出必须低于收入减去储蓄的结果。这条看似简单的 "哈佛教条"&…

作者头像 李华
网站建设 2026/6/23 3:20:06

终极指南:快速掌握eventpp事件处理库的8种集成方法

终极指南&#xff1a;快速掌握eventpp事件处理库的8种集成方法 【免费下载链接】eventpp eventpp - 一个为C提供的事件分派器和回调列表库。 项目地址: https://gitcode.com/gh_mirrors/ev/eventpp eventpp是一个功能强大的C事件分派器和回调列表库&#xff0c;作为纯头…

作者头像 李华