news 2026/7/13 21:17:40

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/7/14 6:31:51

BrowserUse12-源码-MCP模块

BrowserUse12-源码-MCP模块 MCP模块 模块一&#xff1a;当前文件夹核心内容梳理 1.1 核心知识极简概括 MCP集成设计&#xff1a;通过MCP&#xff08;Model Context Protocol&#xff09;标准协议&#xff0c;将browser-use功能暴露给外部AI系统&#xff0c;实现跨平台互操作…

作者头像 李华
网站建设 2026/7/14 4:17:05

AI编程委员会

AI编程委员会在观看一个视频博主的视频时&#xff0c;博主提到一个【AI多示例投票工时机制】->同时开20个LLM实例&#xff0c;互相投票预测下一个Token&#xff0c;从而把文档硬生生的挤出来&#xff0c;我很好奇&#xff01;这个视频中海提到了很多其他的知识点&#xff0c…

作者头像 李华
网站建设 2026/7/13 17:30:03

Unified Medical Image Pre-training in Language-Guided Common Semantic Space》在语言引导的公共语义空间中进行统一医学图像预训练

1. 研究背景和意义 近年来,视觉-语言预训练(VLP)在医学图像分析领域展现出了巨大的潜力,它能够利用放射学报告中的监督信息有效地学习视觉表示,从而减少对昂贵人工标注的依赖 1。然而,目前的医学VLP研究主要集中在单模态数据(主要是2D X射线图像)上。在现实的医疗场景…

作者头像 李华
网站建设 2026/7/14 7:46:55

办公效率神器!四合一工具让文件处理超简单

软件介绍&#xff08;文末获取&#xff09; 今天给大家推荐这款「办公批处理专家」&#xff0c;一个软件集齐了图片压缩、批量重命名、智能归类和格式转换四大功能&#xff0c;完全免费而且使用简单&#xff0c;彻底解决日常办公中的文件处理难题。 图片压缩功能特别实用&…

作者头像 李华
网站建设 2026/7/14 13:13:42

AutoTable终极指南:3分钟上手Java注解驱动数据库表自动化管理

AutoTable终极指南&#xff1a;3分钟上手Java注解驱动数据库表自动化管理 【免费下载链接】AutoTable 基于java实体上的注解完成数据库表自动维护的框架 项目地址: https://gitcode.com/dromara/auto-table 还在为数据库表结构维护而烦恼吗&#xff1f;AutoTable作为基于…

作者头像 李华
网站建设 2026/7/14 5:48:04

快速验证:用Docker容器封装Visual C++ 2015运行环境

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个Docker镜像构建方案&#xff0c;预装Visual C 2015 Redistributable组件。要求&#xff1a;1) 基于Windows Server Core镜像&#xff1b;2) 包含x86和x64版本&#xff1b;3…

作者头像 李华