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

时间:2012-08-07 16:54:53

标签: java collections

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

我能找到的所有收藏品都是阻止(LinkedBlockingQueue)或无限大小(ArrayDeque)。我找到了org.eclipse.jetty.util.ArrayQueue,但正如你可能猜到的那样,这给我的项目带来了不必要的依赖,而且非常复杂,因为它支持更改N,所以它不是我需要的。

你知道是否有办法在一个非常普通的java库中使用它,或者我是否必须自己编写它?

3 个答案:

答案 0 :(得分:6)

查看Apache Commons CircularFifoBuffer

  

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

     

CircularFifoBuffer的删除顺序基于插入   订购;元素的删除顺序与它们的顺序相同   添加。迭代顺序与删除顺序相同。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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