4

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

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

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

4

3 回答 3

6

查看Apache Commons CircularFifoBuffer

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

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

于 2012-08-07T16:59:09.953 回答
2

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

于 2012-08-07T17:45:46.730 回答
2

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

于 2014-03-26T01:01:10.970 回答