是否有固定大小的Deque删除Java中的旧元素?

时间:2017-09-21 18:16:21

标签: java collections queue fifo deque

我需要CircularFifoQueue中的Apache Commons之类的队列,但能够向后迭代元素。 即我需要在固定大小的队列中插入元素,并自动删除旧元素。但我需要从最年轻的元素开始迭代元素。 Java中有什么可用的东西吗?

1 个答案:

答案 0 :(得分:1)

我可以使用类似的东西(还需要重写其他插入方法,如push,pushLast ......),但希望听到其他可用的解决方案(如果存在的话)。

public class ConcurrentFixedSizeLinkedDeque<T> extends ConcurrentLinkedDeque<T> {

    private int sizeLimit = Integer.MAX_VALUE;

    public ConcurrentFixedSizeLinkedDeque() {
    }

    public ConcurrentFixedSizeLinkedDeque(Collection<? extends T> c) {
        super(c);
    }

    public ConcurrentFixedSizeLinkedDeque(int sizeLimit) {
        if(sizeLimit<0) sizeLimit=0;
        this.sizeLimit = sizeLimit;
    }

    public ConcurrentFixedSizeLinkedDeque(Collection<? extends T> c, int sizeLimit) {
        super(c);
        if(sizeLimit<0) sizeLimit=0;
        this.sizeLimit = sizeLimit;
    }

    public int getSizeLimit() {
        return sizeLimit;
    }

    public void setSizeLimit(int sizeLimit) {
        this.sizeLimit = sizeLimit;
    }

    @Override
    public void addFirst(T e){
        while(size()>=this.sizeLimit){
            pollLast();
        }
        super.addFirst(e);
    }

    @Override
    public void addLast(T e){
        while(size()>=this.sizeLimit){
            pollFirst();
        }
        super.addLast(e);
    }
}