Java 中保存最后 N 个元素的大小受限队列

2024-04-15

关于 Java 库的一个非常简单快速的问题:是否有一个现成的类可以实现Queue具有固定的最大大小 - 即它始终允许添加元素,但它会默默地删除头元素以为新添加的元素提供空间。

当然,手动实现它很简单:

import java.util.LinkedList;

public class LimitedQueue<E> extends LinkedList<E> {
    private int limit;

    public LimitedQueue(int limit) {
        this.limit = limit;
    }

    @Override
    public boolean add(E o) {
        super.add(o);
        while (size() > limit) { super.remove(); }
        return true;
    }
}

据我所知,Java stdlibs 中没有标准实现,但 Apache Commons 或类似的东西中可能有一个标准实现?


Apache Commons Collections 4 有一个循环FifoQueue https://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/queue/CircularFifoQueue.html这就是您正在寻找的。引用javadoc:

CircularFifoQueue 是一个具有固定大小的先进先出队列,如果已满,则会替换其最旧的元素。

    import java.util.Queue;
    import org.apache.commons.collections4.queue.CircularFifoQueue;

    Queue<Integer> fifo = new CircularFifoQueue<Integer>(2);
    fifo.add(1);
    fifo.add(2);
    fifo.add(3);
    System.out.println(fifo);

    // Observe the result: 
    // [2, 3]

如果您使用旧版本的 Apache commons collections (3.x),则可以使用循环Fifo缓冲区 https://commons.apache.org/proper/commons-collections/javadocs/api-3.2.2/org/apache/commons/collections/buffer/CircularFifoBuffer.html没有泛型的话,这基本上是一样的。

Update:在支持泛型的公共集合版本 4 发布后更新了答案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 中保存最后 N 个元素的大小受限队列 的相关文章

  • 方法返回类型前的 是什么意思?

    下面的方法返回一个List组成T类型元素 public
  • 在Maven中生成Version.java文件

    我有一个使用 Ant 脚本构建的 Java 项目 我正在尝试将项目转换为 Maven 其中一项任务生成一个名为 Version java 的 Java 源文件 其中包含编译时间戳的静态字符串表示形式 如下所示 package com foo
  • Kafka - 如何同时使用过滤器和过滤器?

    我有一个 Kafka 流 它从一个主题获取数据 并且需要将该信息过滤到两个不同的主题 KStream
  • 以相反的顺序打印任何集合中的项目?

    我在 使用 Java 进行数据结构和问题解决 一书中遇到以下问题 编写一个例程 使用 Collections API 以相反的顺序打印任何 Collection 中的项目 不要使用 ListIterator 我不会把它放在这里 因为我想让有
  • 什么是内部类的合成反向引用

    我正在寻找应用程序中的内存泄漏 我正在使用的探查器告诉我寻找这些类型的引用 但我不知道我在寻找什么 有人可以解释一下吗 Thanks Elliott 您可以对 OUTER 类进行合成反向引用 但不能对内部类实例进行合成 e g class
  • 将类转换为 JSONObject

    我有好几堂这样的课 我想将类转换为 JSONObject 格式 import java io Serializable import com google gson annotations SerializedName public cla
  • ThreeTen 向后移植与 JSR-310 的比较

    由于某些原因 我们现在无法使用 java 8 我们仍然停留在 java 7 上 不过 我想使用新的JSR 310 date time APIs现在 使用官方向后移植 ThreeTen http www threeten org threet
  • 如何更改 Swagger-ui URL 前缀?

    我正在使用 Springfox Swagger2 和 Spring boot 1 5 9 我可以通过此链接访问 swagger UI http localhost 8090 swagger ui html http localhost 80
  • 使用 Proguard 通过 Dropbox.com 库混淆 Android 应用程序

    我刚刚创建了一个需要 Dropbox com API 库的 Android 应用程序 我现在尝试在 发布 模式下构建应用程序 并希望在代码上运行混淆器以对其进行混淆 但是 每当我尝试运行 Proguard 时 都会收到以下错误 Progua
  • 数据库中的持久日期不等于检索日期

    我有一个具有 Date 属性的简单实体类 此属性对应于 MySQL 日期时间列 Entity public class Entity Column name start date Temporal TemporalType TIMESTAM
  • 类更改(例如字段添加或删除)是否保持 Serialized 的向后兼容性?

    我有一个关于 Java 序列化的问题 在这种情况下 您可能需要修改可序列化类并保持向后兼容性 我有丰富的 C 经验 所以请允许我将 Java 与 NET 进行比较 在我的Java场景中 我需要使用Java的运行时序列化机制序列化一个对象 并
  • Java 8 Stream,获取头部和尾部

    Java 8 引入了Stream http download java net jdk8 docs api java util stream Stream html类似于 Scala 的类Stream http www scala lang
  • 如何使用 Jersey 将嵌套列表封送为 JSON?我得到一个空数组或一个包含数组的单元素字典数组

    我正在开发一个使用 Jersey 将对象转换为 JSON 的项目 我希望能够写出嵌套列表 如下所示 data one two three a b c 我想要转换的对象首先将数据表示为 gt gt 我认为 Jersey 会做正确的事情 以上输
  • 文本视图不显示全文

    我正在使用 TableLayout 和 TableRow 创建一个简单的布局 其中包含两个 TextView 这是代码的一部分
  • java实现excel价格、收益率函数[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 用于请求带有临时缓存的远程 Observable 的 RxJava 模式

    用例是这样的 我想暂时缓存最新发出的昂贵的Observable响应 但在它过期后 返回到昂贵的源Observable并再次缓存它 等等 一个非常基本的网络缓存场景 但我真的很难让它工作 private Observable
  • Spring Data Rest 多对多 POST

    首先 让我解释一下我的用例 这非常简单 有一个用户实体和一个服务实体 我使用 UserService 作为连接实体 连接表 在用户和服务之间建立多对多关联最初 会有一些用户集和一些服务集 用户可以在任何时间点订阅任何服务 在这种情况下 将向
  • Java 中清除嵌套 Map 的好方法

    public class MyCache AbstractMap
  • 使用 DBCP 配置 Tomcat

    在闲置一段时间 几个小时 后 我们收到了 CommunicationsException 来自 DBCP 错误消息 在异常中 位于这个问题的末尾 但我没有看到任何配置文件中定义的 wait timeout 我们应该看哪里 在 tomcat
  • 关闭扫描仪是否会影响性能

    我正在解决一个竞争问题 在问题中 我正在使用扫描仪获取用户输入 这是 2 个代码段 一个关闭扫描器 一个不关闭扫描器 关闭扫描仪 import java util Scanner public class JImSelection publ

随机推荐

  • 错误的泛型转换没有 ClassCastException [Java]

    看一下下面这个类的main方法 public class Outer static class A
  • Google 地图,设置最小和最大滑块控件

    我正在开发一个谷歌地图 除了我似乎无法设置最大和最小缩放这一事实之外 它一切正常 我想将默认缩放视图的级别限制为几个级别 我尝试过使用 map getMimimumResolution 但这似乎不起作用 有什么想法吗 function in
  • 如何在 gdb 中打印长字符串的完整值?

    我想在 GDB 中打印 C 字符串的完整长度 默认情况下它是缩写的 如何强制 GDB 打印整个字符串 set print elements 0 来自GDB手册 https sourceware org gdb onlinedocs gdb
  • 将 Jersey 日志输出到文件?

    我们已将这些添加到 web xml 中
  • 如何在 Ruby 中计算字符串的宽度?

    String length只会告诉我字符串中有多少个字符 事实上 在Ruby 1 9之前 它只会告诉我有多少字节 这更没有什么用处 我真的很想知道一个字符串有多少 en 宽 例如 foo width gt 3 moo width gt 3
  • git 将上游设置为原点

    我一直在阅读和使用 git 但仍然对 起源 一词感到困惑 我有一个本地存储库 并在其上创建了一个新分支 这个新分支是我主人的副本 我的主控是原始主控的分叉 是其他人制作的另一个存储库 并且在某些提交方面领先于原始主控 而在其他方面则落后于原
  • 在 64 位计算机上使用 Redemption dll (Outlook)

    我在 32 位机器上安装了一个 exe 它循环访问登录的用户收件箱并且工作正常 注意我仍然没有让它为另一个用户工作 see here https stackoverflow com questions 589254 using redemp
  • 防止隐藏状态栏重新布局(伪造 SYSTEM_UI_FLAG_LAYOUT_STABLE)

    我正在开发具有列表视图和详细信息视图的应用程序 并且我从列表视图到详细视图进行动画处理 在执行此操作时 我想在某个阶段隐藏状态栏 最好仍然在后台显示列表视图 问题是使用隐藏状态栏 getWindow setFlags WindowManag
  • 如何使用 java.nio.ByteBuffer 从 C++ 返回到 Java

    这几乎是问题的重复如何使 Swig 正确包装在 C 中修改为 Java Something or other 的 char 缓冲区 https stackoverflow com questions 2740068 how can i ma
  • 更新的标题:为什么 ICommand.CanExecute 一直被调用,而不是像事件一样工作?

    我在 WPF 中采用 MVVM 模式并学习了使用Command 但在我的实现中 我分配来实现的代表CanExecute总是被调用 我的意思是 如果我在委托函数内放置一个断点 它表明该函数不断被调用 根据我的理解 也是一种自然的思维方式 但我
  • 如何使用 CSS 实现这种视觉效果

    我需要仅使用 css 和一个高度和宽度为 300px 的 div 创建上述视觉效果 我尝试了渐变但无法得到任何相同的东西 有人可以帮忙吗 渐变是一个好主意 您甚至可以添加内容 无论渐变的大小如何 只要将其大小设置为正方形即可 div bac
  • 使用带有几个字符串的 Ionic Storage 的 QuotaExceededError

    我在离子存储方面遇到了这个问题 这是完整的堆栈跟踪 core es5 js 1084 ERROR Error Uncaught in promise QuotaExceededError at c polyfills js 3 at c p
  • 如何使用词袋进行训练和预测?

    我有一个文件夹 里面有汽车各个角度的图像 我想使用词袋方法来训练系统识别汽车 训练完成后 我希望如果给出那辆车的图像 它应该能够识别它 我一直在尝试学习 opencv 中的 BOW 函数 以便完成这项工作 并且已经达到了我现在不知道该怎么做
  • vue.js 可以绑定内联样式吗?

    我很好奇 Vue js 中是否可以绑定内联样式 我熟悉类绑定 但是如果有时由于某种原因您想要内联绑定样式语句 是否可以像对待类一样绑定它 例如
  • 枚举和字典<枚举,操作>

    我希望我能以每个人都清楚的方式解释我的问题 我们需要您对此的建议 我们有一个枚举类型 它定义了超过 15 个常量 我们收到来自 Web 服务的报告 并将其一列转换为此枚举类型 根据我们从该网络服务收到的信息 我们使用以下命令运行特定功能 字
  • 有什么例子可以说明了解 C 语言可以让我用任何其他语言编写更好的代码?

    在 Stack Overflow 播客中 Joel Spolsky 不断地抱怨 Jeff Atwood 不知道如何用 C 语言编写代码 他的说法是 了解 C 可以帮助你编写更好的代码 他还总是使用某种涉及字符串操作的故事 以及了解 C 如何
  • Azure 数据工厂 v2:活动执行管道输出

    有没有办法在活动 执行管道 中引用已执行管道的输出 即 主管道按顺序执行2个管道 第一个管道生成一个自己创建的 run id 需要将其作为参数转发到第二个管道 我已阅读文档并检查主管道是否记录了第一个管道的输出 但看起来这不可能直接实现 到
  • 断言:exportArchive:“Test.app”需要配置文件

    当我尝试在 Xcode9 中使用 Xcode 服务器集成持续集成时 我可以成功创建 BOT 并尝试集成 然后我总是收到类似的错误 断言 exportArchive Test app 需要配置文件 如何解决这个问题 我遇到了同样的问题 并按照
  • torch.mm、torch.matmul 和 torch.mul 有什么区别?

    阅读完 pytorch 文档后 我仍然需要帮助来理解之间的区别torch mm torch matmul and torch mul 由于我不完全理解它们 所以我无法简明地解释这一点 B torch tensor 1 1207 0 3137
  • Java 中保存最后 N 个元素的大小受限队列

    关于 Java 库的一个非常简单快速的问题 是否有一个现成的类可以实现Queue具有固定的最大大小 即它始终允许添加元素 但它会默默地删除头元素以为新添加的元素提供空间 当然 手动实现它很简单 import java util Linked