为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

婷婷同学_ 2019-11-12 12:47:13
我需要一个固定大小的队列。当我添加一个元素并且队列已满时,它应该自动删除最旧的元素。Java中是否有为此实现的现有实现?
查看完整描述

3 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

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


再一次,由于所有队列都是AbstractQueue的子级,因此只需将其用作内部数据类型,您就应该有一个灵活的实现,它几乎可以在任何时间运行:-)


更新:


如下所述,有两种开放的实现方式(伙计们,这个答案已经很老了!),有关详细信息,请参见此答案。


查看完整回答
反对 回复 2019-11-12
?
九州编程

TA贡献1785条经验 获得超4个赞

实际上,LinkedHashMap完全可以满足您的需求。您需要重写该removeEldestEntry方法。


最多包含10个元素的队列的示例:


  queue = new LinkedHashMap<Integer, String>()

  {

     @Override

     protected boolean removeEldestEntry(Map.Entry<Integer, String> eldest)

     {

        return this.size() > 10;   

     }

  };

如果“ removeEldestEntry”返回true,则将最旧的条目从地图中删除。


查看完整回答
反对 回复 2019-11-12
?
郎朗坤

TA贡献1921条经验 获得超9个赞

我只是这样实现了一个固定大小的队列:


public class LimitedSizeQueue<K> extends ArrayList<K> {


    private int maxSize;


    public LimitedSizeQueue(int size){

        this.maxSize = size;

    }


    public boolean add(K k){

        boolean r = super.add(k);

        if (size() > maxSize){

            removeRange(0, size() - maxSize);

        }

        return r;

    }


    public K getYoungest() {

        return get(size() - 1);

    }


    public K getOldest() {

        return get(0);

    }

}


查看完整回答
反对 回复 2019-11-12
  • 3 回答
  • 0 关注
  • 463 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信