问题
我需要一个固定大小的队列。当我添加一个元素并且队列已满时,它应该自动删除最旧的元素。
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。