是否有一个固定大小的队列可以删除过多的元素?

新手上路,请多包涵

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

在 Java 中是否有针对此的现有实现?

原文由 c0d3x 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 875
2 个回答

Java 语言和运行时中没有现有的实现。所有队列都扩展了 AbstractQueue ,其文档清楚地指出,将元素添加到完整队列总是以异常结束。最好(并且非常简单)将 Queue 包装到您自己的类中以获得您需要的功能。

再一次,因为所有队列都是 AbstractQueue 的子队列,只需将其用作您的内部数据类型,您应该可以立即运行一个灵活的实现 :-)

更新:

如下所述,有两个可用的开放实现(这个答案很老,伙计们!),请参阅 此答案 以获取详细信息。

原文由 moritz 发布,翻译遵循 CC BY-SA 3.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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题