我需要一个固定大小的队列。当我添加一个元素并且队列已满时,它应该会自动删除最旧的元素。
在 Java 中是否有针对此的现有实现?
原文由 c0d3x 发布,翻译遵循 CC BY-SA 4.0 许可协议
我需要一个固定大小的队列。当我添加一个元素并且队列已满时,它应该会自动删除最旧的元素。
在 Java 中是否有针对此的现有实现?
原文由 c0d3x 发布,翻译遵循 CC BY-SA 4.0 许可协议
实际上 LinkedHashMap 完全符合您的要求。您需要重写 removeEldestEntry
方法。
最多包含 10 个元素的队列示例:
queue = new LinkedHashMap<Integer, String>()
{
@Override
protected boolean removeEldestEntry(Map.Entry<Integer, String> eldest)
{
return this.size() > 10;
}
};
如果“removeEldestEntry”返回 true,则最旧的条目将从地图中删除。
原文由 Mavrik 发布,翻译遵循 CC BY-SA 3.0 许可协议
4 回答1.2k 阅读✓ 已解决
4 回答1.2k 阅读✓ 已解决
1 回答2.5k 阅读✓ 已解决
2 回答715 阅读✓ 已解决
2 回答1.7k 阅读
2 回答1.7k 阅读
2 回答1.3k 阅读
Java 语言和运行时中没有现有的实现。所有队列都扩展了 AbstractQueue ,其文档清楚地指出,将元素添加到完整队列总是以异常结束。最好(并且非常简单)将 Queue 包装到您自己的类中以获得您需要的功能。
再一次,因为所有队列都是 AbstractQueue 的子队列,只需将其用作您的内部数据类型,您应该可以立即运行一个灵活的实现 :-)
更新:
如下所述,有两个可用的开放实现(这个答案很老,伙计们!),请参阅 此答案 以获取详细信息。