【Java】使用`LinkedList`类来实现一个队列,并通过继承`AbstractQueue`或者实现`Queue`接口来实现自定义队列
使用LinkedList类来实现一个队列,并通过继承AbstractQueue或者实现Queue接口来实现自定义队列。
以下是一个简单的示例,其中队列的大小与另一个List的容量保持一致:
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;public class DynamicSizeQueue<T> extends AbstractQueue<T> {private Queue<T> queue;private List<?> list;public DynamicSizeQueue(List<?> list) {this.queue = new LinkedList<>();this.list = list;}@Overridepublic boolean offer(T t) {if (list.size() == queue.size()) {return false; // 队列已满,无法添加新元素}return queue.offer(t);}@Overridepublic T poll() {return queue.poll();}@Overridepublic T peek() {return queue.peek();}@Overridepublic int size() {return queue.size();}@Overridepublic java.util.Iterator<T> iterator() {return queue.iterator();}
}
在这个示例中,我们创建了一个名为DynamicSizeQueue的类,它继承自AbstractQueue并持有一个LinkedList作为内部队列。在构造函数中,我们传入了另一个List作为参考,以便保持队列大小与该List的容量一致。
offer方法用于添加元素
在队列已满时返回false。poll方法用于取出队首元素并删除,peek方法用于获取队首元素但不删除,size方法用于获取队列大小。我们还实现了iterator方法以支持遍历队列。
在Java中,offer、poll和peek是Queue接口中定义的方法,它们用于操作队列中的元素。
offer方法用于向队列中添加一个元素,如果队列已满则返回false。其方法签名为boolean offer(E e),其中E是队列中存储的元素类型。示例代码如下:
Queue<Integer> queue = new LinkedList<>();
boolean result = queue.offer(5);
poll方法用于获取并移除队列的头部元素,如果队列为空则返回null。其方法签名为E poll(),其中E是队列中存储的元素类型。示例代码如下:
Queue<Integer> queue = new LinkedList<>();
Integer result = queue.poll();
peek方法用于获取队列的头部元素但不移除,如果队列为空则返回null。其方法签名为E peek(),其中E是队列中存储的元素类型。示例代码如下:
Queue<Integer> queue = new LinkedList<>();
Integer result = queue.peek();
总结:
offer用于添加元素到队列,如果队列已满则返回false。poll用于获取并移除队列头部的元素,如果队列为空则返回null。peek用于获取队列头部的元素但不移除,如果队列为空则返回null。
在Java中,如果您想要实现在添加新元素时挤出最旧的元素,您可以使用Queue接口的offer和poll方法来实现。通过在调用offer方法之后检查队列的大小,如果队列大小超过了您希望的大小,可以调用poll方法来移除最旧的元素。
调用poll方法移除最旧的元素。
使用offer方法添加新元素,poll方法获取并移除头部元素,peek方法获取头部元素但不移除,size方法获取队列大小。
public boolean offer(T element) {if (queue.size() >= maxSize) {queue.poll(); // 移除最旧的元素}return queue.offer(element); // 添加新元素}
相关文章:
【Java】使用`LinkedList`类来实现一个队列,并通过继承`AbstractQueue`或者实现`Queue`接口来实现自定义队列
使用LinkedList类来实现一个队列,并通过继承AbstractQueue或者实现Queue接口来实现自定义队列。 以下是一个简单的示例,其中队列的大小与另一个List的容量保持一致: import java.util.LinkedList; import java.util.List; import java.util…...
ChatGPT消息发不出去了?我找到解决方案了
现象 今天忽然发现 ChatGPT无法发送消息,能查看历史对话,但是无法发送消息。 猜测原因 出现这个问题的各位,应该都是点击登录后顶部弹窗邀请[加入多语言 alapha 测试]了,并且语言选择了中文,抓包看到ab.chatgpt.com…...
《量子计算:下一个大风口,还是一个热炒概念?》
引言 量子计算,作为一项颠覆性的技术,一直以来备受关注。它被认为是未来计算领域的一次革命,可能改变我们对计算能力和数据处理的理解。然而,随着技术的不断进步和商业应用的探索,人们开始思考,量子计算到底是一个即将到来的大风口,还是一个被过度炒作的概念? 量子计…...
在Ubuntu中如何基于conda安装jupyterlab
在Ubuntu中如何创建ipykernel 可以用下面命令完成 conda create -n newenv python3.8conda activate enwenvconda install ipykernel5.1.4conda install ipython_genutilsipython -m ipykernel install --user --namepython3 --display-name Python3conda install -c conda-fo…...
Unity 中的 PlayFab 入门
要开始在 Unity 中使用 PlayFab,你只需执行以下两个简单步骤即可。第一步是设置 PlayFab 帐户。第二步是通过安装 Unity 编辑器扩展将其连接到 Unity。或者,你也可以下载 PlayFab SDK 并在没有扩展的情况下进行配置。 设置你的 PlayFab 帐户 访问 PlayFab 的网站并创建你的…...
常见排序算法(C++)
评判一个排序算法时除了时间复杂度和空间复杂度之外还要考虑对cache的捕获效果如何,cache友好的排序算法应该对数据的访问相对集中,快速排序相较于堆排序优点就是在于对cache的捕获效果好。 堆排序 时间复杂度:O(n log n …...
多线程编程互斥锁mutex的创建
在Linux下的多线程编程中,互斥锁(mutex)的创建主要有两种方式:静态分配和动态分配。这两种方式的主要区别在于互斥锁的生命周期和初始化方式。 静态分配(静态方式) 静态分配方式是在程序编译时就已经确定互…...
在 SpringBoot3 中使用 Mybatis-Plus 报错
在 SpringBoot3 中使用 Mybatis-Plus 报错 Property ‘sqlSessionFactory’ or ‘sqlSessionTemplate’ are required Caused by: java.lang.IllegalArgumentException: Property sqlSessionFactory or sqlSessionTemplate are requiredat org.springframework.util.Assert.no…...
【libwebrtc】基于m114的构建
libwebrtc A C++ wrapper for binary release, mainly used for flutter-webrtc desktop (windows, linux, embedded).是 基于m114版本的webrtc 最新(20240309 ) 的是m122了。官方给出的构建过程 .gclient 文件 solutions = [{"name" : src,"url...
ansible-playbook的角色(role)
1前言 角色目录如下(分别为httpd角色和nginx角色) handlers/ :至少应该包含一个名为 main.yml 的文件; 其它的文件需要在此文件中通过include 进行包含 vars/ :定义变量,至少应该包含一个名为 main.yml 的…...
SNR = 6.02N + 1.76dB 公式推导
简介 接触ADC或DAC时您一定会碰到这个经常被引用的公式,用于计算转换器理论信噪比 (SNR)。与其盲目地相信表象,不如从根本上了解其来源,因为该公式蕴含着一些微妙之 处,如果不深入探究,可能导致对数据手册技术规格和转…...
归并排序 刷题笔记
归并排序的写法 归并排序 分治双指针 1.定义一个mid if(l>r)return ; 2.分治 sort(q,l,mid); sort(q,mid1,r); 3. 双指针 int il,jmid,k0; 将双序列扫入 缓存数组 条件 while(i<mid&&j<r) 两个数列比较大小 小的一方 进入缓存数组 4. 扫尾 while(…...
字节一面:TCP 和 UDP 可以使用同一个端口吗?
数据包是计算机网络通信的核心,包含头部和数据负载。TCP和UDP协议在传输层使用端口号区分服务和应用。操作系统通过IP头部中的协议字段和端口号来管理网络流量,确保TCP和UDP流量即使共用端口号也不会相互干扰。 在现代计算机网络中,数据传输…...
java guide 八股
Java语言特点 简单易学、面向对象(继承、封装、多态)、平台无关性(Java虚拟机jvm)、支持多线程、可靠、安全、高效、支持网络编程、编译与解释共存 JVM:Java虚拟机(跨平台的关键) JREÿ…...
Windows上使用client-go远程访问安装在本地WMware上的Linux虚拟机里的minikube
我在自己的Windows上安装了WMware,并在WMware上安装了CentOS操作系统,然后在CentOS上创建了一个叫minikube的用户,使用minikube用户启动了一个minikube集群,但是我在Windows上使用client-go并无法连通minikube,搜遍全网…...
Linux/Ubuntu/Debian基本命令:命令行历史记录
一组与类 Unix 环境中的命令行(Terminal)历史记录和命令调用相关的键盘快捷键: Ctrl R: 启动对以前使用过的命令的反向搜索。 当你键入时,它将查找并显示与输入的字符匹配的最新命令。Ctrl G: 退出历史搜索模式,不运行命令。 如…...
倒计时32天
L1-032 Left-pad - 2024团体程序设计天梯赛(历年真题)练习集 (pintia.cn) #include<bits/stdc.h> using namespace std; #define int long long const int N2e56; const int inf0x3f3f3f3f; void solve() {int n;char s;cin>>n>>s;ge…...
模型驱动架构MDA
MDE 模型驱动工程(MDE, Model-Driven Engineering)是软件工程的一个分支,它将模型与建模拓展到软件开发的所有方面,形成一个多维建模空间,从而将工程活动建立在这些模型的映射和转换之上。[1] MDE的基本原则是将模型视…...
std::error::Error 和 std::io::Error 的区别和用法
std::error::Error 和 std::io::Error 在 Rust 中都是用于错误处理的类型,但它们各自有不同的用途和场景。 std::error::Error: std::error::Error 是一个 trait,它定义了错误处理的基本接口。这个 trait 通常由其他具体的错误类型实现&…...
16 OpenCV Laplance算子
文章目录 图像的二阶导数Laplance算子代码示例 图像的二阶导数 在二阶导数的时候,最大变化处的值为零即边缘是零值。通过二阶 导数计算,依据此理论我们可以计算图像二阶导数,提取边缘。 Laplance算子 void Laplacian( InputArray src, Output…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
[USACO23FEB] Bakery S
题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间…...
Java数组Arrays操作全攻略
Arrays类的概述 Java中的Arrays类位于java.util包中,提供了一系列静态方法用于操作数组(如排序、搜索、填充、比较等)。这些方法适用于基本类型数组和对象数组。 常用成员方法及代码示例 排序(sort) 对数组进行升序…...
