1
과 같은 큐가 Apache Commons에 있어야하지만 요소를 역순으로 반복 할 수 있어야합니다. 즉, 고정 요소 대기열에 요소를 삽입하고 이전 요소를 자동 제거해야합니다. 하지만 가장 어린 요소부터 시작하여 요소를 반복해야합니다. 자바에서 사용할 수있는 것이 있습니까?Java에서 이전 요소를 제거하는 고정 크기 Deque가 있습니까?
과 같은 큐가 Apache Commons에 있어야하지만 요소를 역순으로 반복 할 수 있어야합니다. 즉, 고정 요소 대기열에 요소를 삽입하고 이전 요소를 자동 제거해야합니다. 하지만 가장 어린 요소부터 시작하여 요소를 반복해야합니다. 자바에서 사용할 수있는 것이 있습니까?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);
}
}
당신은 (https://docs.oracle.com/javase/7/docs/api/java/util/Deque.html) 자바 Deque와 인터페이스를 구현하는 클래스를 통해 봤어? 이 클래스들은 descendingIterator() 메서드를 제공하여 역순으로 반복 할 수 있기 때문에 유용 할 수 있습니다. –
그러나 모든 Deque에는 descendingIterator()가 있어야합니다. 아직도 Deque는 오래된 요소를 자동으로 제거하지 못했습니다. – Alexandr