1
のようなキューがApache Commonsに必要ですが、要素を逆方向に反復することができます。 I.私は古い要素の自動削除で固定サイズのキューに要素を挿入する必要があります。しかし、私は最も若い要素から始まる要素を反復する必要があります。 Javaで利用できるものはありますか?Javaで古い要素を削除する固定サイズのDequeはありますか?
のようなキューがApache Commonsに必要ですが、要素を逆方向に反復することができます。 I.私は古い要素の自動削除で固定サイズのキューに要素を挿入する必要があります。しかし、私は最も若い要素から始まる要素を反復する必要があります。 Javaで利用できるものはありますか?Javaで古い要素を削除する固定サイズのDequeはありますか?
私はこのようなものを使うことができます(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