Documentation of 'info.monitorenter.util.collections.RingBufferArrayFast' Java class
RingBufferArrayFast
info.monitorenter.util.collections

Class RingBufferArrayFast<T>

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


    public class RingBufferArrayFast<T>
    extends java.lang.Object
    implements java.lang.Cloneable, IRingBuffer<T>
    Fast ring buffer implementation.

    This implementation differs from the RingBufferArray in one point:
    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 lost. This avoids the need for an internal List to store elements overhanging. Some tests may be left out that may speed up this IRingBuffer. Adding 5000000 elements was about 25 % faster compared to the RingBufferArray on an Athlon 1200, 256 MB RAM.

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

    See Also:
    Serialized Form
    • Field Summary

      Fields 
      Modifier and Type Field and Description
      static boolean DEBUG
      Flip the switch and you will see how the compiler changes the size of the class file.
    • Constructor Summary

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

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method and Description
      T add(T anObject)
      Adds an element to the ring buffer, potentially removing the first element to make more room.
      void clear()
      Fast method to clear the buffer - only needs to set three primitive members.
      boolean equals(java.lang.Object obj) 
      int getBufferSize()
      Returns the absolute amount of space in the buffer.
      T getOldest()
      Returns the oldest element from the buffer.
      T getYoungest()
      Returns the last element added.
      int hashCode() 
      boolean isEmpty()
      Tests whether no elements are stored in the buffer.
      boolean isFull()
      Returns true if no more space in the buffer is available.
      java.util.Iterator<T> iterator()
      Delegates to iteratorL2F().
      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

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

        forEach, spliterator
    • Field Detail

      • DEBUG

        public static final boolean DEBUG
        Flip the switch and you will see how the compiler changes the size of the class file.
        See Also:
        Constant Field Values
    • Constructor Detail

      • RingBufferArrayFast

        public RingBufferArrayFast(int aSize)
        Constructs a RingBuffer with the given size.
        Parameters:
        aSize - the size of the buffer.
    • Method Detail

      • add

        public T add(T anObject)
        Adds an element to the ring buffer, potentially removing the first element to make more room.

        Specified by:
        add in interface IRingBuffer<T>
        Parameters:
        anObject - the instance to add.
        Returns:
        the oldest Object, if RingBuffer was filled with 'maxsize' elements before, or null.
      • clear

        public void clear()
        Fast method to clear the buffer - only needs to set three primitive members.

        Specified by:
        clear in interface IRingBuffer<T>
        See Also:
        IRingBuffer.clear()
      • equals

        public boolean equals(java.lang.Object obj)
        Overrides:
        equals in class java.lang.Object
        See Also:
        Object.equals(java.lang.Object)
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class java.lang.Object
        See Also:
        Object.hashCode()
      • isEmpty

        public boolean isEmpty()
        Description copied from interface: IRingBuffer
        Tests whether no elements are stored in the buffer.

        Specified by:
        isEmpty in interface IRingBuffer<T>
        Returns:
        true if no element is stored in the buffer.
        See Also:
        IRingBuffer.isEmpty()
      • iterator

        public java.util.Iterator<T> iterator()
        Delegates to iteratorL2F().

        Specified by:
        iterator in interface java.lang.Iterable<T>
        See Also:
        Iterable.iterator()
      • iteratorF2L

        public 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.

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

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

        public java.util.Iterator<T> iteratorL2F()
        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>
        Returns:
        an Iterator that will return the elements in exactly the order the subsequent call to remove() would do.
      • remove

        public T remove()
        Description copied from interface: IRingBuffer
        Removes the oldest element from the buffer.

        Specified by:
        remove in interface IRingBuffer<T>
        Returns:
        the removed oldest element from the buffer.
        See Also:
        IRingBuffer.remove()
      • 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>
        Parameters:
        newSize - the new size of the buffer.
      • size

        public int size()
        Description copied from interface: IRingBuffer
        Returns the actual amount of elements stored in the buffer.

        Specified by:
        size in interface IRingBuffer<T>
        Returns:
        the actual amount of elements stored in the buffer.
        See Also:
        IRingBuffer.size()
      • 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 arraycopy - operation an malloc are triggered.

        Overrides:
        toString in class java.lang.Object
        Returns:
        a string representation of the RingBuffer and it's contents.

DMelt 3.0 © DataMelt by jWork.ORG

You see the box below because you did not login.