1
我需要一個CircularFifoQueue這樣的隊列在Apache Commons中,但能夠向後迭代元素。 也就是說我需要在固定大小的隊列中插入元素並自動刪除舊元素。但是我需要從最年輕的元素開始迭代元素。 Java中有沒有可用的東西?是否有一個固定大小的Deque,它刪除Java中的舊元素?
我需要一個CircularFifoQueue這樣的隊列在Apache Commons中,但能夠向後迭代元素。 也就是說我需要在固定大小的隊列中插入元素並自動刪除舊元素。但是我需要從最年輕的元素開始迭代元素。 Java中有沒有可用的東西?是否有一個固定大小的Deque,它刪除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);
}
}
您是否瀏覽了實現Java Deque接口的類(https://docs.oracle.com/javase/7/docs/api/java/util/Deque.html)?任何這些類都可以爲你工作,因爲它們提供了一個descendingIterator()方法,以相反的順序迭代。 –
但任何Deque都必須有descendingIterator()。儘管如此,我仍然沒有發現自動刪除舊元素的Deque。 – Alexandr