问题

我需要一个固定大小的队列。当我添加一个元素并且队列已满时,它应该自动删除最旧的元素。

Java中是否存在此实现?


#1 热门回答(97 赞)

实际上,LinkedHashMap完全符合你的要求。你需要覆盖removeEldestEntry方法。

具有最多10个元素的队列示例:

queue = new LinkedHashMap<Integer, String>()
  {
     @Override
     protected boolean removeEldestEntry(Map.Entry<Integer, String> eldest)
     {
        return this.size() > 10;   
     }
  };

如果"removeEldestEntry"返回true,则从 Map 中删除最旧的条目。


#2 热门回答(51 赞)

#是,两个

从2856661346和this correct answer,我学到了两个:

  • Google Guava中的EvictingQueue
  • Apache Commons中的CircularFifoQueue

我有效地使用了GuavaEvictingQueue,效果很好。


#3 热门回答(13 赞)

Java语言和运行时中没有现有的实现。所有队列的扩展名为AbstractQueue,其文档明确指出,向完整队列添加元素始终以异常结束。将Queue包装到你自己的类中以获得所需的功能将是最好的(并且非常简单)。

再一次,因为所有队列都是AbstractQueue的子代,所以只需将它作为内部数据类型使用,你应该在几乎没有时间运行灵活的实现:-)

更新:

如下所述,有两个开放的实现可用(这个答案很老,伙计们!),详见this answer


原文链接