Class RingBufferArray<T>

  • Type Parameters:
    T - the type to store.
    All Implemented Interfaces:
    IRingBuffer<T>, java.io.Serializable, java.lang.Cloneable, java.lang.Iterable<T>

    public class RingBufferArray<T>
    extends RingBufferArrayFast<T>
    A RingBuffer can be used to store a limited number of entries of any type within a buffer.

    As soon as the maximum number of entries is reached, the next entry is added to the end and the first entry is removed from it. In this case, all elements are stored in a Object[]. But don't worry there will not be a single call to System.arraycopy caused by invocation of the add(Object element)- method. Internal indexes into the array for the head and tail allow to reuse the same memory again and again.
    No element is lost: If setBufferSize(int asize) decreases the size of the buffer and it will get smaller than the actual amount of elements stored, they will get cached until removed.

    For allowing high performance single-threaded use this implementation and the implementations of the retrievable Iterator- instances are not synchronized at all.

    Version:
    $Revision: 1.10 $
    Author:
    Achim Westermann
    See Also:
    Serialized Form
    • Constructor Summary

      Constructors 
      Constructor Description
      RingBufferArray​(int aSize)
      Constructs a RingBuffer with the given size.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      boolean equals​(java.lang.Object obj)  
      int hashCode()  
      boolean isEmpty()
      Tests whether no elements are stored in the buffer.
      java.util.Iterator<T> iteratorF2L()
      Returns an Iterator that will return the elements in exactly the inverse order the subsequent call to remove() would do.
      java.util.Iterator<T> iteratorL2F()
      Returns an Iterator that will return the elements in exactly the order the subsequent call to remove() would do.
      T remove()
      Removes the oldest element from the buffer.
      T[] removeAll()
      Clears the buffer.
      void setBufferSize​(int newSize)
      Sets a new buffer- size.
      int size()
      Returns the actual amount of elements stored in the buffer.
      java.lang.String toString()
      Returns a string representation of the RingBuffer and it's contents.
      • Methods inherited from class java.lang.Object

        finalize, getClass, notify, notifyAll, wait, wait, wait
      • Methods inherited from interface java.lang.Iterable

        forEach, spliterator
    • Field Detail

      • m_pendingremove

        protected java.util.List<T> m_pendingremove
        Elements that stores elements that have to be removed due to an invocation to setBufferSize(int) with a smaller argument than the amount of elements stored.
    • Constructor Detail

      • RingBufferArray

        public RingBufferArray​(int aSize)
        Constructs a RingBuffer with the given size.

        Parameters:
        aSize - the size of the buffer.
    • Method Detail

      • equals

        public boolean equals​(java.lang.Object obj)
        Overrides:
        equals in class RingBufferArrayFast<T>
        See Also:
        Object.equals(java.lang.Object)
      • iteratorF2L

        public java.util.Iterator<T> iteratorF2L()
        Description copied from class: RingBufferArrayFast
        Returns an Iterator that will return the elements in exactly the inverse order the subsequent call to remove() would do.

        The youngest elements are returned first. The Iterator returned is not thread- safe!

        Specified by:
        iteratorF2L in interface IRingBuffer<T>
        Overrides:
        iteratorF2L in class RingBufferArrayFast<T>
        Returns:
        an Iterator that will return the elements in exactly the inverse order the subsequent call to remove() would do.
        See Also:
        IRingBuffer.iteratorF2L()
      • iteratorL2F

        public java.util.Iterator<T> iteratorL2F()
        Description copied from class: RingBufferArrayFast
        Returns an Iterator that will return the elements in exactly the order the subsequent call to remove() would do.

        The oldest elements are returned first. The Iterator returned is not thread- safe!

        Specified by:
        iteratorL2F in interface IRingBuffer<T>
        Overrides:
        iteratorL2F in class RingBufferArrayFast<T>
        Returns:
        an Iterator that will return the elements in exactly the order the subsequent call to remove() would do.
        See Also:
        IRingBuffer.iteratorL2F()
      • setBufferSize

        public void setBufferSize​(int newSize)
        Sets a new buffer- size.

        A new size is assigned but the elements "overhanging" are returned by the Object remove()- method first. This may take time until the buffer has its actual size again. Don't pretend on calling this method for saving of memory very often as the whole buffer has to be copied into a new array every time- and if newSize < getSize() additional the overhanging elements references have to be moved to the internal List pendingremove.

        Specified by:
        setBufferSize in interface IRingBuffer<T>
        Overrides:
        setBufferSize in class RingBufferArrayFast<T>
        Parameters:
        newSize - the new size of the buffer.
      • toString

        public java.lang.String toString()
        Returns a string representation of the RingBuffer and it's contents.

        Don't call this in your application too often: hard array copy - operation and memory allocations are triggered.

        Overrides:
        toString in class RingBufferArrayFast<T>
        Returns:
        a string representation of the RingBuffer and it's contents.