Queue Implementierung

Wippi11223

Mitglied
Hallo,

Ich bin auf der Suche nach einer einfachen limitierten Queue auf Basis FIFO.
Dieser Datenspeicher soll x Elemente halten wenn ich das x+1 hinzufüge fliegt das erste aus der Queue. Die Queues die ich gefunden habe sind aber alle speziell und meiner Meinung nach nicht dafür geeignet:

  • ConcurrentLinkedQueue
  • DelayQueue
  • ArrayBlockingQueue
  • LinkedBlockingQueue
  • PriorityQueue
  • PriorityBlockingQueue
Wie kann ich dies umsetzen?

Vielen Dank
 

httpdigest

Top Contributor
Was du suchst, nennt sich "Ring Buffer". Solche Datenstrukturen können gut als FIFO eingesetzt werden.
Ich habe dir mal schnell eine Beispielimplementierung gebaut:
Java:
import java.lang.reflect.Array;
import java.util.NoSuchElementException;
class RingBuffer<T> {
    private T[] array;
    private int size, write;
    public RingBuffer(int capacity) {
        array = createGenericArray(capacity);
    }
    @SafeVarargs
    @SuppressWarnings("unchecked")
    private T[] createGenericArray(int capacity, T... _dummy) {
        return (T[]) Array.newInstance(_dummy.getClass().getComponentType(), capacity);
    }
    public void add(T value) {
        array[write] = value;
        write = (write + 1) % array.length;
        size = Math.min(size + 1, array.length);
    }
    public int size() {
        return size;
    }
    public T get() {
        if (size == 0)
            throw new NoSuchElementException();
        return array[Math.floorMod(write - size--, array.length)];
    }
}
public class RingBufferTest {
    public static void main(String[] args) {
        RingBuffer<Integer> rb = new RingBuffer<>(4);
        rb.add(1);
        rb.add(2);
        rb.add(3);
        rb.get();
        rb.add(4);
        rb.add(5);
        while (rb.size() > 0) {
            System.out.println(rb.get());
        }
    }
}
 
Zuletzt bearbeitet:

Wippi11223

Mitglied
super vielen Dank!! genau das was ich suche...eine Frage noch:
Ich habe folgende Anforderung: ich bekomme kontinuierlich (also jede Sekunde eine 0 oder 1).
Ich möchte mir die Ratio ausrechnen von einem gewissen Zeitraum. Meine Idee wäre hier einen Queue zu implementieren wo ich mir 15 Werte speichere und mir die Ratio berechne: Summe aller Werte/Queue Size

Oder gibt es dafür eine einfachere Implementierung?
 

httpdigest

Top Contributor
Es ist immer interessant, wenn Leute ihren tatsächlichen Use-Case nennen, nachdem dann Fragen zu einer Lösung diskutiert wurden, die eher dafür ungeeignet ist. :)
Wenn du also nur Bits hast, dann kannst du dafür wunderbar ein Bitset (in Form eines einfachen ints) nehmen:
Java:
public class RunningBits {
    private final int bitmask;
    private final int capacity;
    private int bits;
    private int size;
    RunningBits(int capacity) {
        if (capacity < 1 || capacity > 32)
            throw new IllegalArgumentException();
        this.bitmask = (1 << capacity) - 1;
        this.capacity = capacity;
    }
    public void add(int bit) {
        bits = bits << 1 & bitmask | bit & 1;
        size = Math.min(size + 1, capacity);
    }
    public float ratio() {
        return (float) Integer.bitCount(bits) / size;
    }
    public static void main(String[] args) {
        RunningBits bits = new RunningBits(15);
        bits.add(1);
        bits.add(0);
        bits.add(1);
        bits.add(1);
        bits.add(0);
        bits.add(0);
        System.out.println(bits.ratio());
    }
}
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
Für so einen gleitenden Mittelwert kann man schon einen RingPuffer nutzen (das Bitset ist ja in dem Beispiel nichts anderes, nur eben für Bits optimiert).

Entweder eine fertige Implementierung (Apache Commons und Google Guava müssten beide passendes haben) oder eben was eigenes, was im Hintergrund einfach ne bestehende Queue/List nutzt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Klasse Queue Implementierung in Java Allgemeine Java-Themen 4
W Queue.remove() -> no such element exception Allgemeine Java-Themen 17
mrStudent The method append is not applicable for the arguments (Queue<Integer>, Queue<Integer>) Allgemeine Java-Themen 4
M Queue mit einem Array implemetieren Allgemeine Java-Themen 16
Kirby.exe Nullpointer Exception bei Queue Allgemeine Java-Themen 5
P Durchlaufen einer Queue Allgemeine Java-Themen 9
S Queue Allgemeine Java-Themen 2
M Queues und Queue Interface Allgemeine Java-Themen 3
F Message Queue Tipps Allgemeine Java-Themen 3
E Queue: Wie kann hier ein null-Pointer Exception auftreten?! Allgemeine Java-Themen 11
M FIFO Queue: bytes in, float/double/etc out Allgemeine Java-Themen 5
D priority queue sortieren Allgemeine Java-Themen 10
F Threads, Queue, Gemeinsame Daten Allgemeine Java-Themen 6
G QUEUE und Threads Allgemeine Java-Themen 5
H Queue ausgeben Allgemeine Java-Themen 5
M Queue für spider/crawler? Allgemeine Java-Themen 2
M Reflection Queue auslesen Allgemeine Java-Themen 6
E Executors - wie kann ich die Queue leeren? Allgemeine Java-Themen 2
A Queue, beim dem das letzte Element herausfällt Allgemeine Java-Themen 4
C Untidy Priority Queue Allgemeine Java-Themen 2
S Suche schnellen Container Typ Queue Allgemeine Java-Themen 7
P Queue, Mausevents Allgemeine Java-Themen 4
G Queue erzeugen Allgemeine Java-Themen 2
T Queue-Hilfe benötigt Allgemeine Java-Themen 4
G Parameteriesierung von Queue funktioniert nicht Allgemeine Java-Themen 2
M Queue Allgemeine Java-Themen 11
L Unterschied zwischen List und LinkedList implementierung? Allgemeine Java-Themen 15
boschl2000 Springerproblem-Implementierung funktioniert nicht richtig Allgemeine Java-Themen 1
L rotateLeft implementierung Allgemeine Java-Themen 2
R In der Ausgabe sollte anstelle des obersten Sterns ein "+" stehen nur scheitere ich bei der Implementierung Allgemeine Java-Themen 9
D Input/Output Implementierung eines CommandHandlers/Parsers für viele Eingaben Allgemeine Java-Themen 26
Stonie Prüfen von direkter Implementierung eines Interfaces Allgemeine Java-Themen 7
S Mutable objects und Implementierung von ChangeEvents Allgemeine Java-Themen 5
C Ein Iterator ist eine Implementierung des Interface Iterable? Allgemeine Java-Themen 2
F Implementierung von Teilprogrammen [Java|Python] Allgemeine Java-Themen 7
I TimSort - Sortieralgorithmus - Erklärung und Pseudocode - Implementierung Allgemeine Java-Themen 2
L Implementierung eines AVT-Baums Allgemeine Java-Themen 2
ruutaiokwu burstsort-implementierung in java? Allgemeine Java-Themen 2
D Implementierung einer Mehrsprachigkeit, wichtig ? Allgemeine Java-Themen 5
D Implementierung einer Rechteverwaltung Allgemeine Java-Themen 2
A Implementierung eines Algorithmus (Farthest Insertion zur Lösung des TSP) in O(n²) Allgemeine Java-Themen 2
R "Countdown" Implementierung Allgemeine Java-Themen 5
K A*-Implementierung flexibler machen Allgemeine Java-Themen 4
J Java-Implementierung diverser Beziehungen zwischen Klassen bzw. Objekten Allgemeine Java-Themen 2
S BlueJ Cäsar-Implementierung Allgemeine Java-Themen 6
S Implementierung Programmneustart Allgemeine Java-Themen 10
R Implementierung eines Interface durch 2 verschiedene Klassen Allgemeine Java-Themen 6
G Implementierung einer Kommunikation Allgemeine Java-Themen 7
S Implementierung einer PluginArchitektur Allgemeine Java-Themen 5
A OOP: Überschreiben/Implementierung von Methoden Allgemeine Java-Themen 5
K Objekt einer konkreten Implementierung eines Interfaces durch übergebenen String Allgemeine Java-Themen 2
R Intervall-Implementierung mit selbstgebauter LinkedList Allgemeine Java-Themen 7
J Best Practice für implementierung von equals(...) Allgemeine Java-Themen 7
Kr0e Eigene RMI Implementierung Allgemeine Java-Themen 3
V Wie finde ich die konkrete Implementierung? Allgemeine Java-Themen 8
G Implementierung vom AKS-Test Allgemeine Java-Themen 11
R software implementierung Allgemeine Java-Themen 3
N Observer/Observable der JAVA-API od. eigene Implementierung Allgemeine Java-Themen 2
K Design / Implementierung Allgemeine Java-Themen 5
B jre browser implementierung ? Allgemeine Java-Themen 4
B Elegantere Lösung bei der Implementierung eines Interfaces Allgemeine Java-Themen 2
G Eigene PrintService Implementierung. Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben