正如标题所述,我正在寻找一个java集合,只保留插入集合中的N个最后一个对象。此FIFO集合不需要实现随机访问或支持更改N.
我能找到的所有收藏品都是阻止(LinkedBlockingQueue)或无限大小(ArrayDeque)。我找到了org.eclipse.jetty.util.ArrayQueue,但正如你可能猜到的那样,这给我的项目带来了不必要的依赖,而且非常复杂,因为它支持更改N,所以它不是我需要的。
你知道是否有办法在一个非常普通的java库中使用它,或者我是否必须自己编写它?
答案 0 :(得分:6)
查看Apache Commons CircularFifoBuffer
CircularFifoBuffer是具有固定大小的先进先出缓冲区 如果已满,则替换最旧的元素。
CircularFifoBuffer的删除顺序基于插入 订购;元素的删除顺序与它们的顺序相同 添加。迭代顺序与删除顺序相同。
答案 1 :(得分:2)
我只想写一个包装类,它包含一个私有Queue或Deque实例和一个公共插入方法,当客户端尝试插入一个额外的成员时,如果队列已满,则该方法的行为与您需要的一样。大小可以通过构造函数传递,并且任何属于Queue或Deque的方法,您需要它们,但已经按照您的需要行事,只需转发到私有实例。
答案 2 :(得分:1)
在Guava 15.0之后,EvictingQueue具有固定大小,如果已满,则替换其最旧的元素。