Package de.pakad.adt

Class RingBuffer<T>

java.lang.Object
de.pakad.adt.RingBuffer<T>
Type Parameters:
T - Typ der gespeicherten Elemente
All Implemented Interfaces:
Queue<T>

public class RingBuffer<T> extends Object implements Queue<T>
RingBuffer implementiert eine generische FIFO-Warteschlange (Queue) mithilfe eines Ringpuffers (zirkulärer Speicher).

Die Elemente werden in einem festen Array gespeichert, das logisch zyklisch interpretiert wird. Ein Index zeigt auf das erste Element der Queue, während die Anzahl der gespeicherten Elemente separat verwaltet wird.

Diese Implementierung besitzt eine feste Kapazität und erlaubt konstante Laufzeiten für alle Queue-Operationen.

Java-Version: 17 oder höher

Author:
Karsten Brodmann (kb@punkt-akademie.de)
  • Constructor Summary

    Constructors
    Constructor
    Description
    RingBuffer(int capacity)
    Erzeugt einen neuen RingBuffer mit fester Kapazität.
  • Method Summary

    Modifier and Type
    Method
    Description
    Entfernt das erste Element der Queue und liefert dessen Wert zurück.
    boolean
    Prüft, ob die Queue leer ist.
    void
    enqueue(T obj)
    Fügt ein Element am Ende der Queue ein.
    Liefert das erste Element der Queue, ohne es zu entfernen.
    boolean
    Prüft, ob der Ringpuffer vollständig belegt ist.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • RingBuffer

      public RingBuffer(int capacity) throws IllegalArgumentException
      Erzeugt einen neuen RingBuffer mit fester Kapazität.

      Die Kapazität ist nach der Erzeugung unveränderlich und muss mindestens 10 betragen.

      Parameters:
      capacity - maximale Anzahl speicherbarer Elemente
      Throws:
      IllegalArgumentException - wenn capacity < 10 ist
  • Method Details

    • empty

      public boolean empty()
      Prüft, ob die Queue leer ist.
      Specified by:
      empty in interface Queue<T>
      Returns:
      true, wenn keine Elemente gespeichert sind, sonst false
    • full

      public boolean full()
      Prüft, ob der Ringpuffer vollständig belegt ist.
      Returns:
      true, wenn der Puffer voll ist, sonst false
    • enqueue

      public void enqueue(T obj) throws IllegalArgumentException
      Fügt ein Element am Ende der Queue ein.

      Die Einfügeposition ergibt sich aus dem aktuellen Kopfindex und der Anzahl der gespeicherten Elemente, modulo der Kapazität des Puffers.

      Laufzeit: O(1)

      Specified by:
      enqueue in interface Queue<T>
      Parameters:
      obj - einzufügendes Element
      Throws:
      IndexOutOfBoundsException - wenn der Ringpuffer voll ist
      IllegalArgumentException
    • front

      public T front() throws IllegalArgumentException
      Liefert das erste Element der Queue, ohne es zu entfernen.

      Laufzeit: O(1)

      Specified by:
      front in interface Queue<T>
      Returns:
      erstes Element der Queue
      Throws:
      IndexOutOfBoundsException - wenn die Queue leer ist
      IllegalArgumentException
    • dequeue

      public T dequeue() throws IllegalArgumentException
      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:
      dequeue in interface Queue<T>
      Returns:
      entferntes erstes Element der Queue
      Throws:
      IndexOutOfBoundsException - wenn die Queue leer ist
      IllegalArgumentException