public class SynchronizedList<T>
extends java.lang.Object
implements java.util.List<T>
This does synchronization a bit different than the collection returned by standard Java
Collections.synchronizedList(List)
.
Especially iterators are running over a copy of the original list, so the list has not to stay synchronized via any iteration.
Please note that this does not support sublisting.
It is adamant that all accesses to the underlying list are done via this list, otherwise the synchronization guarantee is void.
Types.synchronizedCollection(Collection)
Constructor and Description |
---|
SynchronizedList(java.util.List<T> baseList)
Constructor.
|
Modifier and Type | Method and Description |
---|---|
void |
add(int index,
T element)
Inserts the specified element at the specified position in this list
(optional operation).
|
boolean |
add(T o)
Ensures that this collection contains the specified element (optional
operation).
|
boolean |
addAll(java.util.Collection<? extends T> c)
Adds all of the elements in the specified collection to this collection
(optional operation).
|
boolean |
addAll(int index,
java.util.Collection<? extends T> c)
Inserts all of the elements in the specified collection into this
list at the specified position (optional operation).
|
void |
clear()
Removes all of the elements from this collection (optional operation).
|
boolean |
contains(java.lang.Object o)
Returns true if this collection contains the specified
element.
|
boolean |
containsAll(java.util.Collection<?> c)
Returns true if this collection contains all of the elements
in the specified collection.
|
static <U> SynchronizedList<U> |
create(java.util.List<U> basicList)
Create a synchronized list from the given basic list.
|
T |
get(int index)
Returns the element at the specified position in this list.
|
int |
indexOf(java.lang.Object o)
Returns the index of the first occurrence of the specified element
in this list, or -1 if this list does not contain the element.
|
boolean |
isEmpty()
Returns true if this collection contains no elements.
|
java.util.Iterator<T> |
iterator()
Returns an iterator over the elements in this collection.
|
int |
lastIndexOf(java.lang.Object o)
Returns the index of the last occurrence of the specified element
in this list, or -1 if this list does not contain the element.
|
java.util.ListIterator<T> |
listIterator()
Returns a list iterator over the elements in this list (in proper
sequence).
|
java.util.ListIterator<T> |
listIterator(int index)
Returns a list iterator over the elements in this list (in proper
sequence), starting at the specified position in the list.
|
T |
remove(int index)
Removes the element at the specified position in this list (optional
operation).
|
boolean |
remove(java.lang.Object o)
Removes a single instance of the specified element from this
collection, if it is present (optional operation).
|
boolean |
removeAll(java.util.Collection<?> c)
Removes all this collection's elements that are also contained in the
specified collection (optional operation).
|
boolean |
retainAll(java.util.Collection<?> c)
Retains only the elements in this collection that are contained in the
specified collection (optional operation).
|
T |
set(int index,
T element)
Replaces the element at the specified position in this list with the
specified element (optional operation).
|
int |
size()
Returns the number of elements in this collection.
|
void |
sort(java.util.Comparator<? super T> c) |
java.util.List<T> |
subList(int fromIndex,
int toIndex)
Returns a view of the portion of this list between the specified
fromIndex, inclusive, and toIndex, exclusive.
|
java.lang.Object[] |
toArray()
Returns an array containing all of the elements in this collection.
|
<U> U[] |
toArray(U[] a)
Returns an array containing all of the elements in this collection;
the runtime type of the returned array is that of the specified array.
|
public int size()
public boolean isEmpty()
public boolean contains(java.lang.Object o)
contains
in interface java.util.Collection<T>
contains
in interface java.util.List<T>
o
- element whose presence in this collection is to be tested.java.lang.ClassCastException
- if the type of the specified element
is incompatible with this collection (optional).java.lang.NullPointerException
- if the specified element is null and this
collection does not support null elements (optional).@NotNull public java.util.Iterator<T> iterator()
@NotNull public java.util.ListIterator<T> listIterator()
listIterator
in interface java.util.List<T>
@NotNull public java.util.ListIterator<T> listIterator(int index)
next
.
An initial call to previous
would
return the element with the specified index minus one.listIterator
in interface java.util.List<T>
index
- index of the first element to be returned from the
list iterator (by a call to next
)java.lang.IndexOutOfBoundsException
- if the index is out of range
(index < 0 || index > size()
)@NotNull public java.lang.Object[] toArray()
The returned array will be "safe" in that no references to it are maintained by this collection. (In other words, this method must allocate a new array even if this collection is backed by an array). The caller is thus free to modify the returned array.
This method acts as bridge between array-based and collection-based APIs.
@NotNull public <U> U[] toArray(@NotNull U[] a)
If this collection fits in the specified array with room to spare (i.e., the array has more elements than this collection), the element in the array immediately following the end of the collection is set to null. This is useful in determining the length of this collection only if the caller knows that this collection does not contain any null elements.)
If this collection makes any guarantees as to what order its elements are returned by its iterator, this method must return the elements in the same order.
Like the toArray method, this method acts as bridge between array-based and collection-based APIs. Further, this method allows precise control over the runtime type of the output array, and may, under certain circumstances, be used to save allocation costs
Suppose l is a List known to contain only strings. The following code can be used to dump the list into a newly allocated array of String:
String[] x = (String[]) v.toArray(new String[0]);
Note that toArray(new Object[0]) is identical in function to toArray().
toArray
in interface java.util.Collection<T>
toArray
in interface java.util.List<T>
a
- the array into which the elements of this collection are to be
stored, if it is big enough; otherwise, a new array of the same
runtime type is allocated for this purpose.java.lang.ArrayStoreException
- the runtime type of the specified array is
not a supertype of the runtime type of every element in this
collection.java.lang.NullPointerException
- if the specified array is null.public boolean add(T o)
Collections that support this operation may place limitations on what elements may be added to this collection. In particular, some collections will refuse to add null elements, and others will impose restrictions on the type of elements that may be added. Collection classes should clearly specify in their documentation any restrictions on what elements may be added.
If a collection refuses to add a particular element for any reason other than that it already contains the element, it must throw an exception (rather than returning false). This preserves the invariant that a collection always contains the specified element after this call returns.
add
in interface java.util.Collection<T>
add
in interface java.util.List<T>
o
- element whose presence in this collection is to be ensured.java.lang.UnsupportedOperationException
- add is not supported by
this collection.java.lang.ClassCastException
- class of the specified element prevents it
from being added to this collection.java.lang.NullPointerException
- if the specified element is null and this
collection does not support null elements.java.lang.IllegalArgumentException
- some aspect of this element prevents
it from being added to this collection.public boolean remove(java.lang.Object o)
remove
in interface java.util.Collection<T>
remove
in interface java.util.List<T>
o
- element to be removed from this collection, if present.java.lang.ClassCastException
- if the type of the specified element
is incompatible with this collection (optional).java.lang.NullPointerException
- if the specified element is null and this
collection does not support null elements (optional).java.lang.UnsupportedOperationException
- remove is not supported by this
collection.public boolean containsAll(@NotNull java.util.Collection<?> c)
containsAll
in interface java.util.Collection<T>
containsAll
in interface java.util.List<T>
c
- collection to be checked for containment in this collection.java.lang.ClassCastException
- if the types of one or more elements
in the specified collection are incompatible with this
collection (optional).java.lang.NullPointerException
- if the specified collection contains one
or more null elements and this collection does not support null
elements (optional);
or if the specified collection is
null.contains(Object)
public boolean addAll(@NotNull java.util.Collection<? extends T> c)
addAll
in interface java.util.Collection<T>
addAll
in interface java.util.List<T>
c
- elements to be inserted into this collection.java.lang.UnsupportedOperationException
- if this collection does not
support the addAll method.java.lang.ClassCastException
- if the class of an element of the specified
collection prevents it from being added to this collection.java.lang.NullPointerException
- if the specified collection contains one
or more null elements and this collection does not support null
elements, or if the specified collection is null.java.lang.IllegalArgumentException
- some aspect of an element of the
specified collection prevents it from being added to this
collection.add(Object)
public boolean removeAll(@NotNull java.util.Collection<?> c)
removeAll
in interface java.util.Collection<T>
removeAll
in interface java.util.List<T>
c
- elements to be removed from this collection.java.lang.UnsupportedOperationException
- if the removeAll method
is not supported by this collection.java.lang.ClassCastException
- if the types of one or more elements
in this collection are incompatible with the specified
collection (optional).java.lang.NullPointerException
- if this collection contains one or more
null elements and the specified collection does not support
null elements (optional);
or if the specified collection is
null.remove(Object)
,
contains(Object)
public boolean retainAll(@NotNull java.util.Collection<?> c)
retainAll
in interface java.util.Collection<T>
retainAll
in interface java.util.List<T>
c
- elements to be retained in this collection.java.lang.UnsupportedOperationException
- if the retainAll method
is not supported by this Collection.java.lang.ClassCastException
- if the types of one or more elements
in this collection are incompatible with the specified
collection (optional).java.lang.NullPointerException
- if this collection contains one or more
null elements and the specified collection does not support null
elements (optional);
or if the specified collection is
null.remove(Object)
,
contains(Object)
public void clear()
public boolean addAll(int index, @NotNull java.util.Collection<? extends T> c)
addAll
in interface java.util.List<T>
index
- index at which to insert the first element from the
specified collectionc
- collection containing elements to be added to this listjava.lang.UnsupportedOperationException
- if the addAll operation
is not supported by this listjava.lang.ClassCastException
- if the class of an element of the specified
collection prevents it from being added to this listjava.lang.NullPointerException
- if the specified collection contains one
or more null elements and this list does not permit null
elements, or if the specified collection is nulljava.lang.IllegalArgumentException
- if some property of an element of the
specified collection prevents it from being added to this listjava.lang.IndexOutOfBoundsException
- if the index is out of range
(index < 0 || index > size())public T get(int index)
get
in interface java.util.List<T>
index
- index of the element to returnjava.lang.IndexOutOfBoundsException
- if the index is out of range
(index < 0 || index >= size())public T set(int index, T element)
set
in interface java.util.List<T>
index
- index of the element to replaceelement
- element to be stored at the specified positionjava.lang.UnsupportedOperationException
- if the set operation
is not supported by this listjava.lang.ClassCastException
- if the class of the specified element
prevents it from being added to this listjava.lang.NullPointerException
- if the specified element is null and
this list does not permit null elementsjava.lang.IllegalArgumentException
- if some property of the specified
element prevents it from being added to this listjava.lang.IndexOutOfBoundsException
- if the index is out of range
(index < 0 || index >= size())public void add(int index, T element)
add
in interface java.util.List<T>
index
- index at which the specified element is to be insertedelement
- element to be insertedjava.lang.UnsupportedOperationException
- if the add operation
is not supported by this listjava.lang.ClassCastException
- if the class of the specified element
prevents it from being added to this listjava.lang.NullPointerException
- if the specified element is null and
this list does not permit null elementsjava.lang.IllegalArgumentException
- if some property of the specified
element prevents it from being added to this listjava.lang.IndexOutOfBoundsException
- if the index is out of range
(index < 0 || index > size())public T remove(int index)
remove
in interface java.util.List<T>
index
- the index of the element to be removedjava.lang.UnsupportedOperationException
- if the remove operation
is not supported by this listjava.lang.IndexOutOfBoundsException
- if the index is out of range
(index < 0 || index >= size())public int indexOf(java.lang.Object o)
indexOf
in interface java.util.List<T>
o
- element to search forjava.lang.ClassCastException
- if the type of the specified element
is incompatible with this list
(optional)java.lang.NullPointerException
- if the specified element is null and this
list does not permit null elements
(optional)public int lastIndexOf(java.lang.Object o)
lastIndexOf
in interface java.util.List<T>
o
- element to search forjava.lang.ClassCastException
- if the type of the specified element
is incompatible with this list
(optional)java.lang.NullPointerException
- if the specified element is null and this
list does not permit null elements
(optional)@NotNull public java.util.List<T> subList(int fromIndex, int toIndex)
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 elements 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<T>
fromIndex
- low endpoint (inclusive) of the subListtoIndex
- high endpoint (exclusive) of the subListjava.lang.UnsupportedOperationException
- sublisting is not supportedpublic void sort(java.util.Comparator<? super T> c)
sort
in interface java.util.List<T>
@NotNull public static <U> SynchronizedList<U> create(@NotNull java.util.List<U> basicList)
U
- type of listbasicList
- basic list