com.jme3.util
Class SafeArrayList<E>
java.lang.Object
com.jme3.util.SafeArrayList<E>
- All Implemented Interfaces:
- java.lang.Iterable<E>, java.util.Collection<E>, java.util.List<E>
public class SafeArrayList<E>
- extends java.lang.Object
- implements java.util.List<E>
Provides a list with similar modification semantics to java.util.concurrent's
CopyOnWriteArrayList except that it is not concurrent and also provides
direct access to the current array. This List allows modification of the
contents while iterating as any iterators will be looking at a snapshot of
the list at the time they were created. Similarly, access the raw internal
array is only presenting a snap shot and so can be safely iterated while
the list is changing.
All modifications, including set() operations will cause a copy of the
data to be created that replaces the old version. Because this list is
not designed for threading concurrency it further optimizes the "many modifications"
case by buffering them as a normal ArrayList until the next time the contents
are accessed.
Normal list modification performance should be equal to ArrayList in a
many situations and always better than CopyOnWriteArrayList. Optimum usage
is when modifications are done infrequently or in batches... as is often the
case in a scene graph. Read operations perform superior to all other methods
as the array can be accessed directly.
Important caveats over normal java.util.Lists:
- Even though this class supports modifying the list, the subList() method
returns a read-only list. This technically breaks the List contract.
- The ListIterators returned by this class only support the remove()
modification method. add() and set() are not supported on the iterator.
Even after ListIterator.remove() or Iterator.remove() is called, this change
is not reflected in the iterator instance as it is still refering to its
original snapshot.
Constructor Summary |
SafeArrayList(java.lang.Class<E> elementType)
|
SafeArrayList(java.lang.Class<E> elementType,
java.util.Collection<? extends E> c)
|
Methods inherited from class java.lang.Object |
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
SafeArrayList
public SafeArrayList(java.lang.Class<E> elementType)
SafeArrayList
public SafeArrayList(java.lang.Class<E> elementType,
java.util.Collection<? extends E> c)
createArray
protected final <T> T[] createArray(java.lang.Class<T> type,
int size)
createArray
protected final E[] createArray(int size)
getArray
public final E[] getArray()
- Returns a current snapshot of this List's backing array that
is guaranteed not to change through further List manipulation.
Changes to this array may or may not be reflected in the list and
should be avoided.
getBuffer
protected final java.util.List<E> getBuffer()
size
public final int size()
- Specified by:
size
in interface java.util.Collection<E>
- Specified by:
size
in interface java.util.List<E>
isEmpty
public final boolean isEmpty()
- Specified by:
isEmpty
in interface java.util.Collection<E>
- Specified by:
isEmpty
in interface java.util.List<E>
contains
public boolean contains(java.lang.Object o)
- Specified by:
contains
in interface java.util.Collection<E>
- Specified by:
contains
in interface java.util.List<E>
iterator
public java.util.Iterator<E> iterator()
- Specified by:
iterator
in interface java.lang.Iterable<E>
- Specified by:
iterator
in interface java.util.Collection<E>
- Specified by:
iterator
in interface java.util.List<E>
toArray
public java.lang.Object[] toArray()
- Specified by:
toArray
in interface java.util.Collection<E>
- Specified by:
toArray
in interface java.util.List<E>
toArray
public <T> T[] toArray(T[] a)
- Specified by:
toArray
in interface java.util.Collection<E>
- Specified by:
toArray
in interface java.util.List<E>
add
public boolean add(E e)
- Specified by:
add
in interface java.util.Collection<E>
- Specified by:
add
in interface java.util.List<E>
remove
public boolean remove(java.lang.Object o)
- Specified by:
remove
in interface java.util.Collection<E>
- Specified by:
remove
in interface java.util.List<E>
containsAll
public boolean containsAll(java.util.Collection<?> c)
- Specified by:
containsAll
in interface java.util.Collection<E>
- Specified by:
containsAll
in interface java.util.List<E>
addAll
public boolean addAll(java.util.Collection<? extends E> c)
- Specified by:
addAll
in interface java.util.Collection<E>
- Specified by:
addAll
in interface java.util.List<E>
addAll
public boolean addAll(int index,
java.util.Collection<? extends E> c)
- Specified by:
addAll
in interface java.util.List<E>
removeAll
public boolean removeAll(java.util.Collection<?> c)
- Specified by:
removeAll
in interface java.util.Collection<E>
- Specified by:
removeAll
in interface java.util.List<E>
retainAll
public boolean retainAll(java.util.Collection<?> c)
- Specified by:
retainAll
in interface java.util.Collection<E>
- Specified by:
retainAll
in interface java.util.List<E>
clear
public void clear()
- Specified by:
clear
in interface java.util.Collection<E>
- Specified by:
clear
in interface java.util.List<E>
equals
public boolean equals(java.lang.Object o)
- Specified by:
equals
in interface java.util.Collection<E>
- Specified by:
equals
in interface java.util.List<E>
- Overrides:
equals
in class java.lang.Object
hashCode
public int hashCode()
- Specified by:
hashCode
in interface java.util.Collection<E>
- Specified by:
hashCode
in interface java.util.List<E>
- Overrides:
hashCode
in class java.lang.Object
get
public final E get(int index)
- Specified by:
get
in interface java.util.List<E>
set
public E set(int index,
E element)
- Specified by:
set
in interface java.util.List<E>
add
public void add(int index,
E element)
- Specified by:
add
in interface java.util.List<E>
remove
public E remove(int index)
- Specified by:
remove
in interface java.util.List<E>
indexOf
public int indexOf(java.lang.Object o)
- Specified by:
indexOf
in interface java.util.List<E>
lastIndexOf
public int lastIndexOf(java.lang.Object o)
- Specified by:
lastIndexOf
in interface java.util.List<E>
listIterator
public java.util.ListIterator<E> listIterator()
- Specified by:
listIterator
in interface java.util.List<E>
listIterator
public java.util.ListIterator<E> listIterator(int index)
- Specified by:
listIterator
in interface java.util.List<E>
subList
public java.util.List<E> subList(int fromIndex,
int toIndex)
- Specified by:
subList
in interface java.util.List<E>
toString
public java.lang.String toString()
- Overrides:
toString
in class java.lang.Object