Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java集合仅保留n个最后插入的成员_Java_Collections - Fatal编程技术网

Java集合仅保留n个最后插入的成员

Java集合仅保留n个最后插入的成员,java,collections,Java,Collections,正如标题所述,我正在寻找一个java集合,它只保留插入该集合的最后N个对象。此FIFO集合不需要实现随机访问或支持更改N 我能找到的所有集合要么是阻塞的(),要么是大小不限的()。我找到了org.eclipse.jetty.util.ArrayQueue,但您可以猜到,这对我的项目带来了不必要的依赖,而且非常复杂,因为它支持更改N,所以这不是我需要的 您知道有没有一种方法可以通过一个非常常见的java库实现这一点,还是我必须自己编写?请查看 CircularFifoBuffer是具有固定大小的先

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

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

您知道有没有一种方法可以通过一个非常常见的java库实现这一点,还是我必须自己编写?

请查看

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

CircularFifoBuffer的移除顺序基于插入顺序 秩序;元素的删除顺序与删除它们的顺序相同 补充。迭代顺序与删除顺序相同


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

在Guava 15.0之后,有一个固定大小的ReceivingQueue,如果已满,它将替换最旧的元素。

请检查:您希望“过期”元素发生什么情况?请参阅这个问题的答案是:Hmmm的可能复制品——看起来它不会让你在满的时候添加元素,但这不是OP想要的。@Sammusmann-Whoops。我在想循环费。现在更正请参见CircularFifoQueue了解一般解决方案