【问题标题】:Java collection keeping only n last inserted membersJava 集合仅保留最后插入的 n 个成员
【发布时间】:2012-08-07 16:54:53
【问题描述】:

正如标题所述,我正在寻找一个 java 集合,它只保留插入到集合中的最后 N 个对象。这个FIFO集合不需要实现随机存取,也不支持改变N。

我能找到的所有集合要么是阻塞的 (LinkedBlockingQueue),要么是无限大小的 (ArrayDeque)。我找到了 org.eclipse.jetty.util.ArrayQueue 但你可能猜到这对我的项目带来了相当不必要的依赖,而且非常复杂,因为它支持更改 N 所以它不是我需要的。

你知道是否有办法通过一个非常常见的 java 库来实现它,还是我必须自己编写它?

【问题讨论】:

标签: java collections


【解决方案1】:

查看Apache Commons CircularFifoBuffer

CircularFifoBuffer 是一个固定大小的先进先出缓冲区 如果已满,则替换其最旧的元素。

一个 CircularFifoBuffer 的移除顺序是基于插入的 命令;元素以与它们相同的顺序被删除 添加。迭代顺序与移除顺序相同。

【讨论】:

  • 嗯——看起来它不会让你在满时添加元素,但这不是 OP 想要的。
  • @SamMussmann - 哎呀。正在考虑 CircularFifoBuffer。现已更正
  • 查看 CircularFifoQueue 以获得通用解决方案
【解决方案2】:

我只想编写一个包装类,其中包含一个私有 Queue 或 Deque 实例和一个公共插入方法,如果在客户端尝试插入额外成员时队列已满,则该方法的行为符合您的需要。大小可以通过构造函数传入,任何属于 Queue 或 Deque 的方法,如果您需要可用但已经按照您的需要运行,您可以简单地转发到私有实例。

【讨论】:

    【解决方案3】:

    在 Guava 15.0 之后,EvictingQueue 具有固定大小,如果已满则替换其最旧的元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 2018-03-24
      • 1970-01-01
      • 2011-01-23
      • 2019-06-21
      • 2015-01-15
      相关资源
      最近更新 更多