news 2026/4/10 17:14:58

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/3/31 16:58:40

使用安装包快速体验 TDengine TSDB

为了能够快速体验 TDengine TSDB 的完整功能&#xff0c;推荐您使用 TDengine TSDB-Enterprise. 本节首先介绍如何通过安装包快速安装 TDengine TSDB-Enterprise, 然后介绍如何在 Linux 环境下体验 TDengine TSDB 的写入、查询、可视化管理、与 Grafana 集成和零代码数据写入等…

作者头像 李华
网站建设 2026/4/10 17:13:41

invokedynamic

&#x1f680; Java字节码 invokedynamic 深度解析 &#x1f4da; 什么是 invokedynamic&#xff1f; invokedynamic 是 Java 7 引入的字节码指令&#xff0c;用于实现动态语言特性和Lambda表达式。它是 Java 字节码中第5个方法调用指令。 传统的4个调用指令&#xff1a; i…

作者头像 李华
网站建设 2026/3/31 13:45:51

matlab代码:基于CNN和LSTM的个体用户负荷预测方法 摘要:在本文中,我们考虑的问题是...

matlab代码&#xff1a;基于CNN和LSTM的个体用户负荷预测方法 摘要&#xff1a;在本文中&#xff0c;我们考虑的问题是在需求响应机制下学习居民电力用户的消费模式。 提出了两种利用室外温度、电价和前期负荷预测小时负荷的新方法。 提出的模型分别基于CNN和长短期记忆网络。 …

作者头像 李华