当前位置: 首页 > news >正文

Java Queue 接口实现

Date: 2025.05.14 20:46:38 author: lijianzhan

Java中的Queue接口是位于java.util包中,它是一个用于表示队列的接口。队列是一种先进先出(First-In-First-Out, 简称为FIFO)的数据结构,其中元素被添加到队列的尾部,并从队列的头部移除。

Queue的方法

Queue接口包括Collection接口的所有方法。 这是因为Collection是Queue的超级接口。
Queue接口的一些常用方法是:

#1. 添加元素
add(element): 将指定的元素插入此队列表示的尾部
offer(element): 插入指定的元素到队列中,如果成功则返回true,如果队列达到其容量则返回false
put(element): throws InterruptedException: 插入指定的元素到队列中,如果队列满,则等待空间变得可用
#2.移除元素
remove(): 获取并移除此队列的头部。如果此队列为空,则抛出异常
poll(): 获取并移除此队列的头部。如果此队列为空,则返回null
#3.检查队列
size(): 返回此队列中的元素数
isEmpty(): 如果此队列不包含元素,则返回true
#4.阻塞队列方法
take(): throws InterruptedException: 获取并移除此队列的头部,在数据不可用时,会等待直到元素可用

实现类

Java提供了几个Queue接口的实现类,包括:
LinkedList: 实现了Queue接口,同时它也实现了List和Deque接口,因此它可以作为队列、栈或双端队列使用。

1.PriorityQueue: 实现了Queue接口,基于优先级堆。此队列按照元素的自然顺序或者构造队列时提供的Comparator进行排序。

2.ArrayBlockingQueue: 实现了BlockingQueue接口,是一个由数组支持的有界队列。

3.LinkedBlockingQueue: 实现了BlockingQueue接口,是一个由链表支持的可选有界队列。

4.PriorityBlockingQueue: 实现了BlockingQueue接口,支持优先级的无界队列。

5.DelayQueue: 实现了BlockingQueue接口,其中元素只有在其指定的延时完成后才能被取出。

6.SynchronousQueue: 实现了BlockingQueue接口,不存储任何元素。每个插入操作必须等待另一个线程的对应移除操作,反之亦然。

7.LinkedTransferQueue: 实现了TransferQueue接口,支持FIFO、可阻塞的put和take以及transfer操作。

队列接口的实现

1.实现LinkedList类,示例代码如下:

import java.util.Queue;
import java.util.LinkedList;public class queue {public static void main(String[] args) {// 创建 Queue 使用LinkedList 类Queue<Integer> queueList = new LinkedList<>();int number = 5;for (int i = 1; i <= number; i++) {//添加元素到 QueuequeueList.offer(i);System.out.println("Queue队列: " + i);}// 访问Queue的元素int accessedNumber = queueList.peek();System.out.println("访问元素: " + accessedNumber);//从队列中Queue元素int removedNumber = queueList.poll();System.out.println("删除元素: " + removedNumber);System.out.println("更新后的 Queue: " + queueList);}
}

在这里插入图片描述
运行结果如下:
在这里插入图片描述
2.实现PriorityQueue类,示例代码如下:

import java.util.Queue;
import java.util.PriorityQueue;public class queue {public static void main(String[] args) {// 使用PriorityQueue类创建队列Queue<Integer> queueList2 = new PriorityQueue<>();//添加元素到 QueuequeueList2.offer(1);queueList2.offer(2);queueList2.offer(3);System.out.println("Queue: " + queueList2);//访问 Queue 的元素int accessedNumber = queueList2.peek();System.out.println("访问元素: " + accessedNumber);//从 Queue 删除元素int removedNumber = queueList2.poll();System.out.println("删除元素: " + removedNumber);System.out.println("更新后的 Queue: " + queueList2);}
}

在这里插入图片描述
运行结果如下:
在这里插入图片描述
总结:这两个例子展示了如何使用LinkedList类以及PriorityQueue类来实现一个简单的队列,并演示了如何使用Queue接口的方法来操作这个队列。

http://www.xdnf.cn/news/447139.html

相关文章:

  • 【经验分享】Dify+GraphRAG实现知识图谱智能问答
  • QMK键盘编码器(Encoder)(理论部分)
  • Unity Image组件无法阻挡手势的解决办法
  • 如何在运行不同操作系统的计算机上轻松擦除U盘
  • 【行为型之观察者模式】游戏开发实战——Unity事件驱动架构的核心实现策略
  • 医学影像系统的集成与工作流优化
  • 计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 10.增强表面细节(一)过程式凹凸贴图
  • Unity引擎源码-物理系统详解-其二
  • 大疆无人机自主飞行解决方案局限性及增强解决方案-AIBOX:特色行业无人机巡检解决方案
  • 蚓链数字化营销系统深度解析,以“三位一体“模式驱动企业数字化营销转型
  • UniApp 在华为三折叠屏中的适配问题与最佳解决方案(rpx 实战指南)
  • ET MessageSender类(实体)分析
  • LLM笔记(一)基本概念
  • vue-cli项目升级rsbuild,效率提升50%+
  • 文章记单词 | 第74篇(六级)
  • uniapp设置 overflow:auto;右边不显示滚动条的问题
  • 多线程与线程互斥
  • PROE 转 STP 全攻略:软件实操、在线转换与问题解决
  • 学习日志06 java
  • 辛格迪客户案例 | 碧博生物实施用友ERP(U8)系统,同步开展计算机化系统验证(CSV)
  • 数学建模初等模型应用
  • ai agent(智能体)开发 python3基础16:通过最基本的request,json连链接本地模型 ollama中的deepseek-r1:8b
  • 高压差分探头CMRR性能评估方法及优化策略
  • 微服务如何实现服务的高可用
  • html js 原生实现web组件、web公共组件、template模版插槽
  • 【嵌入式开发-软件定时器】
  • Java内存马的检测与发现
  • GraphPad Prism简介、安装与工作界面
  • 【软件测试】第二章·软件测试的基本概念
  • 二叉树前序与后序遍历迭代法详解:栈操作与顺序反转的巧妙结合