是否有固定大小的队列来删除多余的元素?

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

Java中是否有为此实现的现有实现?


婷婷同学_
浏览 464回答 3
3回答

慕虎7371278

Java语言和运行时中没有现有的实现。所有Queue都扩展了AbstractQueue,其文档明确指出,将元素添加到完整队列总是以异常结束。最好(非常简单)将Queue包装到您自己的类中,以具有所需的功能。再一次,由于所有队列都是AbstractQueue的子级,因此只需将其用作内部数据类型,您就应该有一个灵活的实现,它几乎可以在任何时间运行:-)更新:如下所述,有两种开放的实现方式(伙计们,这个答案已经很老了!),有关详细信息,请参见此答案。

九州编程

实际上,LinkedHashMap完全可以满足您的需求。您需要重写该removeEldestEntry方法。最多包含10个元素的队列的示例:&nbsp; queue = new LinkedHashMap<Integer, String>()&nbsp; {&nbsp; &nbsp; &nbsp;@Override&nbsp; &nbsp; &nbsp;protected boolean removeEldestEntry(Map.Entry<Integer, String> eldest)&nbsp; &nbsp; &nbsp;{&nbsp; &nbsp; &nbsp; &nbsp; return this.size() > 10;&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;}&nbsp; };如果“ removeEldestEntry”返回true,则将最旧的条目从地图中删除。

郎朗坤

我只是这样实现了一个固定大小的队列:public class LimitedSizeQueue<K> extends ArrayList<K> {&nbsp; &nbsp; private int maxSize;&nbsp; &nbsp; public LimitedSizeQueue(int size){&nbsp; &nbsp; &nbsp; &nbsp; this.maxSize = size;&nbsp; &nbsp; }&nbsp; &nbsp; public boolean add(K k){&nbsp; &nbsp; &nbsp; &nbsp; boolean r = super.add(k);&nbsp; &nbsp; &nbsp; &nbsp; if (size() > maxSize){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; removeRange(0, size() - maxSize);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; return r;&nbsp; &nbsp; }&nbsp; &nbsp; public K getYoungest() {&nbsp; &nbsp; &nbsp; &nbsp; return get(size() - 1);&nbsp; &nbsp; }&nbsp; &nbsp; public K getOldest() {&nbsp; &nbsp; &nbsp; &nbsp; return get(0);&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java