public class FastTable<E> extends MutableList<E> implements java.util.List<E>, Reusable, java.util.RandomAccess
This class represents a random access collection with real-time behavior (smooth capacity increase).
This class has the following advantages over the widely used
java.util.ArrayList:
shared. Iterations over the FastTable values are faster when
performed using the get(int) method rather than using collection
records or iterators:
FastTable<String> table = new FastTable<String>();
for (int i = 0, n = table.size(); i < n; ++i) {
String value = table.get(i);
}
FastTable supports sorting in place (quick sort)
using the value comparator
for the table (no object or array allocation when sorting).
FastCollection.Record| Constructor and Description |
|---|
FastTable()
Creates a table of small initial capacity.
|
FastTable(java.util.Collection<? extends E> values)
Creates a table containing the specified values, in the order they
are returned by the collection's iterator.
|
FastTable(int capacity)
Creates a table of specified initial capacity; unless the table size
reaches the specified capacity, operations on this table will not
allocate memory (no lazy object creation).
|
FastTable(java.lang.String id)
Creates a persistent table associated to the specified unique identifier
(convenience method).
|
| Modifier and Type | Method and Description |
|---|---|
boolean |
add(E o)
Appends the specified value to the end of this table.
|
void |
add(int index,
E value)
Inserts the specified value at the specified position in this table.
|
boolean |
addAll(java.util.Collection<? extends E> values)
Appends all of the elements in the specified collection to the end of
this list, in the order that they are returned by the
specified collection's Iterator.
|
boolean |
addAll(int index,
java.util.Collection<? extends E> values)
Inserts all of the values in the specified collection into this
table at the specified position.
|
void |
addLast(E value)
Appends the specified value to the end of this table (fast).
|
void |
clear()
Removes all of the values from this collection (optional operation).
|
boolean |
contains(java.lang.Object value)
Indicates if this collection contains the specified value.
|
void |
delete(FastCollection.Record record)
Deletes the specified record from this collection.
|
E |
get(int index)
Returns the element at the specified index.
|
protected int |
getCapacity()
Returns the current capacity of this table.
|
E |
getFirst()
Returns the first value of this table.
|
E |
getLast()
Returns the last value of this table.
|
FastComparator<? super E> |
getValueComparator()
Returns the value comparator for this collection (default
FastComparator.DEFAULT). |
FastCollection.Record |
head()
Returns the head record of this collection; it is the record such as
head().getNext() holds the first collection value. |
int |
indexOf(java.lang.Object o)
Returns the index in this table of the first occurrence of the specified
value, or -1 if this table does not contain this value.
|
boolean |
isEmpty()
Indicates if this collection is empty.
|
java.util.Iterator<E> |
iterator()
Returns an iterator over the elements in this list
(allocated on the stack when executed in a
StackContext). |
int |
lastIndexOf(java.lang.Object o)
Returns the index in this table of the last occurrence of the specified
value, or -1 if this table does not contain this value.
|
java.util.ListIterator<E> |
listIterator()
Returns a list iterator over the elements in this list
(allocated on the stack when executed in a
StackContext). |
java.util.ListIterator<E> |
listIterator(int index)
Returns a list iterator from the specified position
(allocated on the stack when executed in a
StackContext). |
static <E> FastTable<E> |
newInstance()
Returns a new, preallocated or
recycled table instance
(on the stack when executing in a StackContext). |
static void |
recycle(FastTable instance)
Recycles a table
instance immediately
(on the stack when executing in a StackContext). |
E |
remove(int index)
Removes the value at the specified position from this table.
|
boolean |
remove(java.lang.Object o)
Removes the first occurrence in this collection of the specified value
(optional operation).
|
E |
removeLast()
Removes and returns the last value of this table (fast).
|
void |
removeRange(int fromIndex,
int toIndex)
Removes the values between
[fromIndex..toIndex[ |
void |
reset()
Resets the internal state of this object to its default values.
|
E |
set(int index,
E value)
Replaces the value at the specified position in this table with the
specified value.
|
void |
setSize(int size)
Sets the size of this table.
|
FastTable<E> |
setValueComparator(FastComparator<? super E> comparator)
Sets the comparator to use for value equality or comparison if the
collection is ordered (see
sort()). |
FastTable<E> |
shared()
Returns a thread-safe read-write view of this collection.
|
int |
size()
Returns the number of values in this collection.
|
FastTable<E> |
sort()
Sorts this table in place (quick sort) using this table
value comparator
(smallest first). |
java.util.List<E> |
subList(int fromIndex,
int toIndex)
Returns a view of the portion of this list between the specified
indexes (instance of
FastList allocated from the "stack" when
executing in a StackContext). |
FastCollection.Record |
tail()
Returns the tail record of this collection; it is the record such as
tail().getPrevious() holds the last collection value. |
void |
trimToSize()
Reduces the capacity of this table to the current size (minimize
storage space).
|
FastTable<E> |
unmodifiable()
Returns the unmodifiable view associated to this collection.
|
E |
valueOf(FastCollection.Record record)
Returns the collection value for the specified record.
|
containsAll, equals, hashCode, removeAll, retainAll, toArray, toArray, toString, toTextclone, finalize, getClass, notify, notifyAll, wait, wait, waitpublic FastTable()
public FastTable(java.lang.String id)
id - the unique identifier for this map.java.lang.IllegalArgumentException - if the identifier is not unique.PersistentContext.Referencepublic FastTable(int capacity)
capacity - the initial capacity.public FastTable(java.util.Collection<? extends E> values)
values - the values to be placed into this table.public static <E> FastTable<E> newInstance()
recycled table instance
(on the stack when executing in a StackContext).public static void recycle(FastTable instance)
instance immediately
(on the stack when executing in a StackContext).public int size()
FastCollectionsize in interface java.util.Collection<E>size in interface java.util.List<E>size in class MutableList<E>public boolean isEmpty()
FastCollectionisEmpty in interface java.util.Collection<E>isEmpty in interface java.util.List<E>isEmpty in class MutableList<E>true if this collection contains no value;
false otherwise.public boolean contains(java.lang.Object value)
FastCollectioncontains in interface java.util.Collection<E>contains in interface java.util.List<E>contains in class MutableList<E>value - the value whose presence in this collection
is to be tested.true if this collection contains the specified
value;false otherwise.public java.util.Iterator<E> iterator()
StackContext).public boolean add(E o)
add in interface java.util.Collection<E>add in interface java.util.List<E>add in class MutableList<E>o - the value to be appended to this table.true (as per the general contract of the
Collection.add method).public boolean remove(java.lang.Object o)
FastCollectionremove in interface java.util.Collection<E>remove in interface java.util.List<E>remove in class MutableList<E>o - the value to be removed from this collection.true if this collection contained the specified
value; false otherwise.public boolean addAll(java.util.Collection<? extends E> values)
addAll in interface java.util.Collection<E>addAll in interface java.util.List<E>addAll in class MutableList<E>c - collection containing elements to be added to this listjava.lang.NullPointerException - if the specified collection is nullpublic boolean addAll(int index,
java.util.Collection<? extends E> values)
Note: If this method is used concurrent access must be synchronized (the table is no more thread-safe).
addAll in interface java.util.List<E>addAll in class MutableList<E>index - the index at which to insert first value from the specified
collection.values - the values to be inserted into this list.true if this list changed as a result of the call;
false otherwise.java.lang.IndexOutOfBoundsException - if (index < 0) ||
(index > size())public void clear()
FastCollectionclear in interface java.util.Collection<E>clear in interface java.util.List<E>clear in class MutableList<E>public E get(int index)
get in interface java.util.List<E>get in class MutableList<E>index - index of value to return.java.lang.IndexOutOfBoundsException - if (index < 0) ||
(index >= size())public E set(int index, E value)
set in interface java.util.List<E>set in class MutableList<E>index - index of value to replace.value - value to be stored at the specified position.java.lang.IndexOutOfBoundsException - if (index < 0) ||
(index >= size())public void add(int index,
E value)
Note: If this method is used concurrent access must be synchronized (the table is no more thread-safe).
add in interface java.util.List<E>add in class MutableList<E>index - the index at which the specified value is to be inserted.value - the value to be inserted.java.lang.IndexOutOfBoundsException - if (index < 0) ||
(index > size())public E remove(int index)
Note: If this method is used concurrent access must be synchronized (the table is no more thread-safe).
remove in interface java.util.List<E>remove in class MutableList<E>index - the index of the value to removed.java.lang.IndexOutOfBoundsException - if (index < 0) ||
(index >= size())public int indexOf(java.lang.Object o)
indexOf in interface java.util.List<E>indexOf in class MutableList<E>o - the value to search for.public int lastIndexOf(java.lang.Object o)
lastIndexOf in interface java.util.List<E>lastIndexOf in class MutableList<E>o - the value to search for.public java.util.ListIterator<E> listIterator()
StackContext).listIterator in interface java.util.List<E>listIterator in class MutableList<E>public java.util.ListIterator<E> listIterator(int index)
StackContext).
The list iterator being returned does not support insertion/deletion.listIterator in interface java.util.List<E>listIterator in class MutableList<E>index - the index of first value to be returned from the
list iterator (by a call to the next method).java.lang.IndexOutOfBoundsException - if the index is out of range
(index < 0 || index > size())
public java.util.List<E> subList(int fromIndex, int toIndex)
FastList allocated from the "stack" when
executing in a StackContext).
If the specified indexes are equal, the returned list is empty.
The returned list is backed by this list, so non-structural changes in
the returned list are reflected in this list, and vice-versa.
This method eliminates the need for explicit range operations (of
the sort that commonly exist for arrays). Any operation that expects
a list can be used as a range operation by passing a subList view
instead of a whole list. For example, the following idiom
removes a range of values from a list:
list.subList(from, to).clear();
Similar idioms may be constructed for indexOf and
lastIndexOf, and all of the algorithms in the
Collections class can be applied to a subList.
The semantics of the list returned by this method become undefined if
the backing list (i.e., this list) is structurally modified in
any way other than via the returned list (structural modifications are
those that change the size of this list, or otherwise perturb it in such
a fashion that iterations in progress may yield incorrect results).subList in interface java.util.List<E>subList in class MutableList<E>fromIndex - low endpoint (inclusive) of the subList.toIndex - high endpoint (exclusive) of the subList.java.lang.IndexOutOfBoundsException - if (fromIndex < 0 ||
toIndex > size || fromIndex > toIndex)public FastCollection.Record head()
FastCollectionhead().getNext() holds the first collection value.head in class MutableList<E>public FastCollection.Record tail()
FastCollectiontail().getPrevious() holds the last collection value.tail in class MutableList<E>public E valueOf(FastCollection.Record record)
FastCollectionvalueOf in class MutableList<E>record - the record whose current value is returned.public void delete(FastCollection.Record record)
FastCollectionImplementation must ensure that removing a record from the collection does not affect in any way the records preceding the record being removed (it might affect the next records though, e.g. in a list collection, the indices of the subsequent records will change).
delete in class MutableList<E>record - the record to be removed.public void setSize(int size)
null elements are added; otherwise
the last elements are removed until the desired size is reached.size - the new size.public E getFirst()
java.util.NoSuchElementException - if this table is empty.public E getLast()
java.util.NoSuchElementException - if this table is empty.public void addLast(E value)
value - the value to be added.public E removeLast()
java.util.NoSuchElementException - if this table is empty.public void reset()
Reusablepublic void removeRange(int fromIndex,
int toIndex)
[fromIndex..toIndex[ from
this table.
Note: If this method is used concurrent access must be synchronized
(the table is no more thread-safe).
fromIndex - the beginning index, inclusive.toIndex - the ending index, exclusive.java.lang.IndexOutOfBoundsException - if (fromIndex < 0) || (toIndex < 0)
|| (fromIndex > toIndex) || (toIndex > this.size())public void trimToSize()
public FastTable<E> sort()
value comparator
(smallest first).thispublic FastTable<E> setValueComparator(FastComparator<? super E> comparator)
sort()).comparator - the value comparator.thispublic FastComparator<? super E> getValueComparator()
FastCollectionFastComparator.DEFAULT).getValueComparator in class FastCollection<E>public FastTable<E> unmodifiable()
FastCollectionUnsupportedOperationException being thrown.unmodifiable in class MutableList<E>public FastTable<E> shared()
FastCollectionReturns a thread-safe read-write view of this collection.
The default implementation performs synchronization on read and write. Sub-classes may provide more efficient implementation (e.g. only synchronizing on writes modifying the internal data structure).
Having a shared collection does not mean that modifications made by onethread are automatically viewed by others thread. Which in practice is not an issue. In a well-behaved system, threads need to synchronize only at predetermined synchronization points (the fewer the better).
shared in class MutableList<E>protected final int getCapacity()
Copyright © 2005 - 2007 Javolution.