【问题标题】:Is there any java Deque that implements maxlen, like python collections.deque?有没有实现maxlen的java Deque,比如python collections.deque?
【发布时间】:2015-07-27 10:24:53
【问题描述】:

Python 的 collections.deque 有一个 maxlen 参数,这样

[...] 双端队列限制为指定的最大长度。一旦有界长度的双端队列已满,当添加新项目时,相应数量的项目将从另一端丢弃。 [...]

我一直在寻找一个在 Java 中实现 Deque interface 的类,它的作用是一样的。

public ArrayDeque(int numElements) 看起来像 numElements 仅将双端队列初始化为该大小,但并未将其强制为最大长度。

【问题讨论】:

    标签: java python deque


    【解决方案1】:

    可能不会。 LinkedHashMap 有一些工具可以使用驱逐策略构建缓存,但这对于您想要的可能有点过分了。只需扩展双端队列并添加您的自定义逻辑;-)


    编辑:

    class MyFixedSizeDeque<T> extends ArrayDeque<T>
    {
       private int maxSize;
       public MyDeque(int size)
       {
          this.maxSize = size; 
       }
    
       @Override
       public void addLast(T e)
       {
          this.addLast(e);
          if(this.size() > maxSize)
             this.removeFirst();
       } 
    }
    

    我的 Java 有点生疏了,您可能想重载更多方法(或切换到组合而不是继承),但我希望您明白这一点...

    【讨论】:

    • 基本上我想要 O(1) add 和固定长度的东西。
    • addLast() 确实应该是 O(1)。但不是removeFirst() O(n),因为所有元素都被移动了吗? Aparently,仍然很快,因为 System.arraycopy 可以执行原生 memcpy (depending on the contents)。相同的代码可以扩展 LinkedList 的 O(1) 时间复杂度。我想作文可以满足两者的需求,whichever one may need
    • 哦,对不起,我的错。我实际上确实在考虑将 LinkedList 作为基类,对其第一个和最后一个的访问始终是 O(1),但是键入 ArrayDequeue 因为......不知道......
    猜你喜欢
    • 2016-04-06
    • 2021-10-21
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 2014-02-04
    • 2013-02-02
    • 1970-01-01
    • 2013-11-12
    相关资源
    最近更新 更多