news 2026/6/28 1:39:06

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/27 12:13:17

BrowserUse14-源码-ScreenShot模块-整理

BrowserUse14-源码-ScreenShot模块-整理ScreenShot模块 1-源码部分【下载】基于图片的Base64进行图片的&#xff0c;【查看】指定本地的文件路径进行查看""" 浏览器使用代理的截图存储服务。 """import base64 from pathlib import Pathimport a…

作者头像 李华
网站建设 2026/6/27 4:10:22

品牌营销的“防AI雷区”:MyDetector如何让你的文案和图片双保险

品牌营销的“防AI雷区”&#xff1a;MyDetector 如何让你的文案和图片双保险&#xff08;完整版 1680 字&#xff09; AI 时代&#xff0c;品牌最怕的不是写不出来&#xff0c;而是“写得太像 AI” 在如今的营销圈&#xff0c;AI 已经成了标配&#xff1a; ChatGPT 30 秒出一篇…

作者头像 李华
网站建设 2026/6/25 7:32:04

Lenia完整指南:探索连续细胞自动机的数学生命世界

Lenia完整指南&#xff1a;探索连续细胞自动机的数学生命世界 【免费下载链接】Lenia Lenia - Mathematical Life Forms 项目地址: https://gitcode.com/gh_mirrors/le/Lenia Lenia&#xff08;莱尼亚&#xff09;是一个革命性的连续细胞自动机系统&#xff0c;它打破了…

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

GRASP 10.1.3.0天线仿真软件权威学习指南

软件核心价值与技术定位 【免费下载链接】GRASP101.3.0培训教程公开.pdf分享 本仓库提供了一份极为珍贵的学习资源——GRASP10[1].3.0培训教程。GRASP是一款在天线设计和电磁仿真领域内广泛使用的高级软件工具&#xff0c;它凭借其强大的功能和灵活性&#xff0c;成为了专业工程…

作者头像 李华