Class RingBufferDyn<T>
- Type Parameters:
T- Typ der gespeicherten Elemente
- All Implemented Interfaces:
Queue<T>
RingBufferDyn implementiert eine generische FIFO-Warteschlange
(Queue) mithilfe eines Ringpuffers (zirkulärer Speicher) mit
dynamisch wachsendem Array.
Die Elemente werden in einem Array gespeichert, das logisch zyklisch
interpretiert wird. Ein Index head zeigt auf das erste Element
(Kopf der Queue), und count speichert die aktuelle Anzahl
enthaltener Elemente.
Im Gegensatz zu RingBuffer besitzt diese Implementierung keine
feste Kapazitätsgrenze: Ist der Puffer voll, wird das interne Array
automatisch vergrößert (typischerweise verdoppelt). Dabei werden die
Elemente in FIFO-Reihenfolge in ein neues Array kopiert, sodass
head anschließend wieder auf 0 gesetzt werden kann.
Java-Version: 17 oder höher
- Author:
- Karsten Brodmann (kb@punkt-akademie.de)
-
Constructor Summary
ConstructorsConstructorDescriptionErzeugt einen neuenRingBufferDynmit einer Standardkapazität von 10.RingBufferDyn(int initialCapacity) Erzeugt einen neuenRingBufferDynmit der angegebenen Anfangskapazität. -
Method Summary
Modifier and TypeMethodDescriptiondequeue()Entfernt das erste Element der Queue und liefert dessen Wert zurück.booleanempty()Prüft, ob die Queue leer ist.voidFügt ein Element am Ende der Queue ein.front()Liefert das erste Element der Queue, ohne es zu entfernen.booleanfull()Prüft, ob der Ringpuffer aktuell vollständig belegt ist.intsize()Liefert die Anzahl der in der Queue gespeicherten Elemente.
-
Constructor Details
-
RingBufferDyn
public RingBufferDyn()Erzeugt einen neuenRingBufferDynmit einer Standardkapazität von 10. -
RingBufferDyn
Erzeugt einen neuenRingBufferDynmit der angegebenen Anfangskapazität.Die Kapazität ist nach der Erzeugung nicht fix, sondern kann bei Bedarf automatisch wachsen. Als Mindestkapazität wird 10 gefordert, um kleine Arrays (und häufige Reallokationen) zu vermeiden.
- Parameters:
initialCapacity- Anfangskapazität (mindestens 10)- Throws:
IllegalArgumentException- wenninitialCapacity < 10ist
-
-
Method Details
-
empty
public boolean empty()Prüft, ob die Queue leer ist. -
full
public boolean full()Prüft, ob der Ringpuffer aktuell vollständig belegt ist.Hinweis: Bei
RingBufferDynist „voll“ kein Fehlerzustand, sondern löst beim nächstenenqueueeine Vergrößerung aus.- Returns:
true, wenncount == capacitygilt, sonstfalse
-
size
public int size()Liefert die Anzahl der in der Queue gespeicherten Elemente.- Returns:
- Anzahl der Elemente
-
enqueue
Fügt ein Element am Ende der Queue ein.Ist das interne Array voll, wird es automatisch vergrößert. Die Einfügeposition ergibt sich aus
(head + count) % capacity.Laufzeit:
- amortisiert
O(1)(durch gelegentliche Verdopplung) - im Vergrößerungsfall
O(n)(Kopieren vonnElementen)
- amortisiert
-
front
Liefert das erste Element der Queue, ohne es zu entfernen.Laufzeit:
O(1)- Specified by:
frontin interfaceQueue<T>- Returns:
- erstes Element der Queue
- Throws:
IndexOutOfBoundsException- wenn die Queue leer ist
-
dequeue
Entfernt das erste Element der Queue und liefert dessen Wert zurück.Nach dem Entfernen wird der Kopfindex zyklisch weitergeschaltet. Die Referenz auf das entfernte Element wird explizit gelöscht, um Speicherlecks zu vermeiden.
Laufzeit:
O(1)- Specified by:
dequeuein interfaceQueue<T>- Returns:
- entferntes erstes Element der Queue
- Throws:
IndexOutOfBoundsException- wenn die Queue leer ist
-