Class RingBufferArray<T>
- java.lang.Object
-
- info.monitorenter.util.collections.RingBufferArrayFast<T>
-
- info.monitorenter.util.collections.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 theadd(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: IfsetBufferSize(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
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface info.monitorenter.util.collections.IRingBuffer
IRingBuffer.RingBufferException
-
-
Field Summary
Fields Modifier and Type Field Description protected java.util.List<T>
m_pendingremove
Elements that stores elements that have to be removed due to an invocation tosetBufferSize(int)
with a smaller argument than the amount of elements stored.-
Fields inherited from class info.monitorenter.util.collections.RingBufferArrayFast
DEBUG, m_buffer, m_empty, m_headpointer, m_size, m_tailpointer
-
-
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 anIterator
that will return the elements in exactly the inverse order the subsequent call toremove()
would do.java.util.Iterator<T>
iteratorL2F()
Returns anIterator
that will return the elements in exactly the order the subsequent call toremove()
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 info.monitorenter.util.collections.RingBufferArrayFast
add, clear, clone, getBufferSize, getOldest, getYoungest, isFull, iterator
-
-
-
-
Field Detail
-
m_pendingremove
protected java.util.List<T> m_pendingremove
Elements that stores elements that have to be removed due to an invocation tosetBufferSize(int)
with a smaller argument than the amount of elements stored.
-
-
Method Detail
-
equals
public boolean equals(java.lang.Object obj)
- Overrides:
equals
in classRingBufferArrayFast<T>
- See Also:
Object.equals(java.lang.Object)
-
hashCode
public int hashCode()
- Overrides:
hashCode
in classRingBufferArrayFast<T>
- 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 interfaceIRingBuffer<T>
- Overrides:
isEmpty
in classRingBufferArrayFast<T>
- Returns:
- true if no element is stored in the buffer.
- See Also:
IRingBuffer.isEmpty()
-
iteratorF2L
public java.util.Iterator<T> iteratorF2L()
Description copied from class:RingBufferArrayFast
Returns anIterator
that will return the elements in exactly the inverse order the subsequent call toremove()
would do.The youngest elements are returned first. The
Iterator
returned is not thread- safe!- Specified by:
iteratorF2L
in interfaceIRingBuffer<T>
- Overrides:
iteratorF2L
in classRingBufferArrayFast<T>
- Returns:
- an
Iterator
that will return the elements in exactly the inverse order the subsequent call toremove()
would do. - See Also:
IRingBuffer.iteratorF2L()
-
iteratorL2F
public java.util.Iterator<T> iteratorL2F()
Description copied from class:RingBufferArrayFast
Returns anIterator
that will return the elements in exactly the order the subsequent call toremove()
would do.The oldest elements are returned first. The
Iterator
returned is not thread- safe!- Specified by:
iteratorL2F
in interfaceIRingBuffer<T>
- Overrides:
iteratorL2F
in classRingBufferArrayFast<T>
- Returns:
- an
Iterator
that will return the elements in exactly the order the subsequent call toremove()
would do. - See Also:
IRingBuffer.iteratorL2F()
-
remove
public T remove()
Description copied from interface:IRingBuffer
Removes the oldest element from the buffer.- Specified by:
remove
in interfaceIRingBuffer<T>
- Overrides:
remove
in classRingBufferArrayFast<T>
- Returns:
- the removed oldest element from the buffer.
- See Also:
IRingBuffer.remove()
-
removeAll
public T[] removeAll()
Description copied from interface:IRingBuffer
Clears the buffer. It will return all of it's stored elements.- Specified by:
removeAll
in interfaceIRingBuffer<T>
- Overrides:
removeAll
in classRingBufferArrayFast<T>
- Returns:
- all removed elements.
- See Also:
IRingBuffer.removeAll()
-
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 internalList pendingremove
.- Specified by:
setBufferSize
in interfaceIRingBuffer<T>
- Overrides:
setBufferSize
in classRingBufferArrayFast<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 interfaceIRingBuffer<T>
- Overrides:
size
in classRingBufferArrayFast<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 array copy - operation and memory allocations are triggered.
- Overrides:
toString
in classRingBufferArrayFast<T>
- Returns:
- a string representation of the RingBuffer and it's contents.
-
-