public class SafeArrayList<E>
extends java.lang.Object
implements java.util.List<E>, java.lang.Cloneable
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:
Modifier and Type | Class and Description |
---|---|
protected class |
SafeArrayList.ArrayIterator<E> |
Constructor and Description |
---|
SafeArrayList(java.lang.Class<E> elementType) |
SafeArrayList(java.lang.Class<E> elementType,
java.util.Collection<? extends E> collection) |
SafeArrayList(java.lang.Class<E> elementType,
int capacity) |
Modifier and Type | Method and Description |
---|---|
boolean |
add(E e) |
void |
add(int index,
E element) |
boolean |
addAll(java.util.Collection<? extends E> c) |
boolean |
addAll(int index,
java.util.Collection<? extends E> c) |
void |
clear() |
SafeArrayList<E> |
clone() |
boolean |
contains(java.lang.Object o) |
boolean |
containsAll(java.util.Collection<?> c) |
protected <T> T[] |
createArray(java.lang.Class<T> type,
int size) |
protected E[] |
createArray(int size) |
boolean |
equals(java.lang.Object o) |
E |
get(int index) |
E[] |
getArray()
Returns a current snapshot of this List's backing array that
is guaranteed not to change through further List manipulation.
|
protected java.util.List<E> |
getBuffer() |
int |
hashCode() |
int |
indexOf(java.lang.Object o) |
boolean |
isEmpty() |
java.util.Iterator<E> |
iterator() |
int |
lastIndexOf(java.lang.Object o) |
java.util.ListIterator<E> |
listIterator() |
java.util.ListIterator<E> |
listIterator(int index) |
E |
remove(int index) |
boolean |
remove(java.lang.Object o) |
boolean |
removeAll(java.util.Collection<?> c) |
boolean |
retainAll(java.util.Collection<?> c) |
E |
set(int index,
E element) |
int |
size() |
java.util.List<E> |
subList(int fromIndex,
int toIndex) |
java.lang.Object[] |
toArray() |
<T> T[] |
toArray(T[] a) |
java.lang.String |
toString() |
public SafeArrayList(java.lang.Class<E> elementType)
public SafeArrayList(java.lang.Class<E> elementType, int capacity)
public SafeArrayList<E> clone()
clone
in class java.lang.Object
protected final <T> T[] createArray(java.lang.Class<T> type, int size)
protected final E[] createArray(int size)
public final E[] getArray()
protected final java.util.List<E> getBuffer()
public final int size()
public final boolean isEmpty()
public boolean contains(java.lang.Object o)
public java.util.Iterator<E> iterator()
public java.lang.Object[] toArray()
public <T> T[] toArray(T[] a)
public boolean add(E e)
public boolean remove(java.lang.Object o)
public boolean containsAll(java.util.Collection<?> c)
public boolean addAll(java.util.Collection<? extends E> c)
public boolean addAll(int index, java.util.Collection<? extends E> c)
addAll
in interface java.util.List<E>
public boolean removeAll(java.util.Collection<?> c)
public boolean retainAll(java.util.Collection<?> c)
public void clear()
public boolean equals(java.lang.Object o)
public int hashCode()
public int indexOf(java.lang.Object o)
indexOf
in interface java.util.List<E>
public int lastIndexOf(java.lang.Object o)
lastIndexOf
in interface java.util.List<E>
public java.util.ListIterator<E> listIterator()
listIterator
in interface java.util.List<E>
public java.util.ListIterator<E> listIterator(int index)
listIterator
in interface java.util.List<E>
public java.util.List<E> subList(int fromIndex, int toIndex)
subList
in interface java.util.List<E>
public java.lang.String toString()
toString
in class java.lang.Object