news 2026/4/23 8:45: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/4/23 8:44:53

基于Java+ vue校园快递代取系统(源码+数据库+文档)​

校园快递代取 目录 基于springboot vue校园快递代取系统 一、前言 二、系统功能演示 详细视频演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于springboot vue校园快递代取系统 一、前言…

作者头像 李华
网站建设 2026/4/23 8:45:05

BrowserUse10-源码-FileSystem模块-整理

BrowserUse10-源码-FileSystem模块-整理FileSystem模块-整理 1-源代码部分import asyncio import base64 import os import re import shutil from abc import ABC, abstractmethod from concurrent.futures import ThreadPoolExecutor from pathlib import Path from typing i…

作者头像 李华
网站建设 2026/4/18 10:00:02

把钱交给理财专家 —— 基金:普通人的财富增值捷径

把钱交给理财专家 —— 基金&#xff1a;普通人的财富增值捷径很多人都有这样的困惑&#xff1a;想理财却没时间研究股票、看不懂债券条款、怕踩雷不敢买理财&#xff0c;眼睁睁看着钱躺在活期账户里 “缩水”。其实&#xff0c;解决这个问题的答案很简单 ——基金。它就像 “大…

作者头像 李华
网站建设 2026/4/19 19:36:07

Python新手必看:YAML配置文件入门指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 编写一个面向初学者的Python YAML教程代码&#xff0c;包含以下内容&#xff1a;1) 安装PyYAML库的方法&#xff1b;2) 基本YAML语法示例&#xff1b;3) Python读取YAML文件的3种方…

作者头像 李华
网站建设 2026/4/18 9:56:12

Elasticsearch面试小白指南:从零开始

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个面向Elasticsearch初学者的交互式学习应用&#xff0c;从基本概念&#xff08;如倒排索引、文档类型&#xff09;开始&#xff0c;逐步引导用户理解核心功能。包含简单的可…

作者头像 李华
网站建设 2026/4/18 11:27:45

remark终极指南:完全掌握现代Markdown文档处理工作流

remark终极指南&#xff1a;完全掌握现代Markdown文档处理工作流 【免费下载链接】remark markdown processor powered by plugins part of the unifiedjs collective 项目地址: https://gitcode.com/gh_mirrors/rem/remark 你是否曾经面对过这样的困境&#xff1a;需要…

作者头像 李华