2017-09-21 2 views
1

Ich brauche eine Warteschlange wie CircularFifoQueue in Apache Commons aber mit der Fähigkeit Elemente rückwärts zu iterieren. I.e. Ich muss Elemente in eine Warteschlange fester Größe mit automatischer Entfernung von alten Elementen einfügen. Aber ich muss Elemente vom jüngsten Element ausgehend iterieren. Gibt es etwas in Java?Gibt es eine Deque mit fester Größe, die alte Elemente in Java entfernt?

+0

Haben Sie sich die Klassen durch, die die Java Deque-Schnittstelle (https://docs.oracle.com/javase/7/docs/api/java/util/Deque.html) implementieren? Jede dieser Klassen kann für Sie funktionieren, da sie eine Methode descendingIterator() bereitstellt, um in umgekehrter Reihenfolge zu iterieren. –

+1

Aber jede Deque muss absteigendIterator() haben. Trotzdem habe ich Deque nicht gefunden mit der automatischen Entfernung von alten Elementen. – Alexandr

Antwort

1

Ich kann so etwas verwenden (muss auch andere Insert-Methoden wie Push, PushLast ... schreiben), möchte aber andere verfügbare Lösungen hören (wenn sie existieren).

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); 
    } 
} 
Verwandte Themen