是否有一个固定大小的 Deque 可以删除 Java 中的旧元素?
Is there a fixed size Deque which removes old elements in Java?
我需要一个像 CircularFifoQueue in Apache Commons 这样的队列,但要能够向后迭代元素。
IE。我需要在固定大小的队列中插入元素,并自动删除旧元素。但是我需要从最年轻的元素开始迭代元素。 Java 有可用的东西吗?
我可以使用类似的东西(还需要重写其他插入方法,如 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);
}
}
我需要一个像 CircularFifoQueue in Apache Commons 这样的队列,但要能够向后迭代元素。 IE。我需要在固定大小的队列中插入元素,并自动删除旧元素。但是我需要从最年轻的元素开始迭代元素。 Java 有可用的东西吗?
我可以使用类似的东西(还需要重写其他插入方法,如 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);
}
}