is new.
java.lang.Objectjava.util.AbstractCollection<E>
java.util.AbstractSet<E>
java.util.concurrent.CopyOnWriteArraySet<E>
public class CopyOnWriteArraySet<E>
A
Set
that uses
an internal
CopyOnWriteArrayList
for all of its operations. Thus, it shares the same basic properties:
operations (
add
,
set
,
remove
, etc.)
Sample Usage. The following code sketch uses a copy-on-write set to maintain a set of Handler objects that perform some action upon state updates.
class Handler { void handle(); ... }
class X {
private final CopyOnWriteArraySet<Handler> handlers
= new CopyOnWriteArraySet<Handler>();
public void addHandler(Handler h) { handlers.add(h); }
private long internalState;
private synchronized void changeState() { internalState = ...; }
public void update() {
changeState();
for (Handler handler : handlers)
handler.handle();
}
}
This class is a member of the Java Collections Framework .
| Constructor Summary | |
|---|---|
|
CopyOnWriteArraySet
() Creates an empty set. |
|
|
CopyOnWriteArraySet
(
Collection
<? extends
E
Creates a set containing all of the elements of the specified
collection.
|
|
| Method Summary | ||
|---|---|---|
| boolean |
add
(
E
Adds
to this set if it is not already present.
|
|
| boolean |
addAll
(
Collection
<? extends
E
Adds all of the elements in the specified collection to this
set if they're not already present.
|
|
| void |
clear
() Removes all of the elements from this
set.
|
|
| boolean |
contains
(
Object
Returns true if this
set
|
|
| boolean |
containsAll
(
Collection
Returns true if this
set
of
|
|
| boolean |
isEmpty
() Returns true if this
set
|
|
| Iterator < E |
iterator
() Returns an iterator over the elements contained in this
set in the order in which these elements were added.
|
|
| boolean |
remove
(
Object
Removes
set
present.
|
|
| boolean |
removeAll
(
Collection
Removes from this set all of its elements that are contained in the specified
collection.
|
|
| boolean |
retainAll
(
Collection
Retains only the elements in this
set
collection.
|
|
| int |
size
() Returns the number of elements in this
set.
|
|
| Object |
toArray
() Returns an array containing all of the elements in this
set.
|
|
|
toArray
(T[] a) Returns an array containing all of the elements in this
set;
|
|
| Methods inherited from class java.util. AbstractSet |
|---|
| equals , hashCode |
| Methods inherited from class java.util. AbstractCollection |
|---|
| toString |
| Methods inherited from class java.lang. Object |
|---|
| clone , finalize , getClass , notify , notifyAll , wait , wait , wait |
| Constructor Detail |
|---|
public CopyOnWriteArraySet()
public CopyOnWriteArraySet(Collection<? extends E> c)
collection.
c - the collection of elements to initially contain
Throws:
NullPointerException
- if the specified collection is null
| Method Detail |
|---|
public int size()
Returns the number of elements in this set.
set
public boolean isEmpty()
set
This implementation returns
size() == 0
.
set
elements
public boolean contains(Object o)
set
set
an
(o==null ? e==null : o.equals(e))
This implementation iterates over the elements in the collection, checking each element in turn for equality with the specified element.
o - element whose presence in this set is to be tested
set
element
public Object[] toArray()
set.
this set
The returned array will be "safe" in that no references to it are maintained by
this set.
the collection.
(In other words, this method must allocate a new array even if
this set
the collection
is backed by an
array).
Array).
The caller is thus free to modify the returned array.
This method acts as bridge between array-based and collection-based APIs.
This implementation allocates the array to be returned, and iterates over the elements in the collection, storing each object reference in the next consecutive element of the array, starting with element 0.
set
public <T> T[] toArray(T[] a)
set;
set
set.
If
this set
the collection
fits in the specified array with room to spare (i.e., the array has more elements than
this set),
the
collection), the
element in the array immediately following the end of the
set
collection
is set to
null
.
(This
This
is useful in determining the length of
this set
the collection
only
if the caller knows that
this set
the collection
does not contain any
null
elements.)
If this
set
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
This implementation checks if the array is large enough to contain the collection; if not, it allocates a new array of the correct size and type (using reflection). Then, it iterates over the collection, storing each object reference in the next consecutive element of the array, starting with element 0. If the array is larger than the collection, a
x
null
is a set known to contain only strings. The following code can be used to dump the set into a newly allocated array of
String
:
String[] y = x.toArray(new String[0]);
Note that
toArray(new Object[0])
is identical in function to
toArray()
.
this set
an array containing all the elements in this set
Throws:
ArrayStoreException
- if the runtime type of the specified array is not a supertype of the runtime type of every element in this set
NullPointerException
- if the specified array is null
public void clear()
set.
set
returns.
This implementation iterates over this collection, removing each element using the
Iterator.remove
operation. Most implementations will probably choose to override this method for efficiency.
Note that this implementation will throw an
UnsupportedOperationException
if the iterator returned by this collection's
iterator
method does not implement the
remove
method and this collection is non-empty.
remove
public boolean
publicIterator<E>remove
iterator(
Object
o)
()
Removes the specified element from this set if it is present. More formally, removes an element
e
such that
(o==null ? e==null : o.equals(e))
, if this set contains such an element. Returns
true
if this set contained the element (or equivalently, if this set changed as a result of the call). (This set will not contain the element once the call returns.)
remove
remove
Overrides:
remove
Parameters:
o - object to be removed from this set, if present
true
if this set contained the specified element
add
public booleanadd
remove(E
Objecte)
o)
Adds the specified element to this set if it is not already present. More formally, adds the specified element
to this set if the set contains no element
e2
such that
(e==null ? e2==null : e.equals(e2))
. If this set already contains the element, the call leaves the set unchanged and returns
This implementation iterates over the collection looking for the specified element. If it finds the element, it removes the element from the collection using the iterator's remove method.
Note that this implementation throws an
false
UnsupportedOperationException
.
if the iterator returned by this collection's iterator method does not implement the
remove
method and this collection contains the specified object.
add
add
add
e
added to
set
if this set did not already contain the specified element
containsAll
public booleancontainsAll
add(Collection
E<?> c)
o)
if this set contains all of the elements of the specified collection. If the specified collection is also a set, this method returns
true
if it is a
subset
of this set.
This implementation always throws an
UnsupportedOperationException
.
containsAll
containsAll
containsAll
c - collection to be checked for containment in this set
if this set contains all of the elements of the specified collection
Throws:
NullPointerException
- if the specified collection is null
See Also:
contains(Object)
addAll
public booleanaddAll
containsAll(Collection<? extends
E
> c)
<?> c)
Adds all of the elements in the specified collection to this set if they're not already present. If the specified collection is also a set, the
addAll
operation effectively modifies this set so that its value is the
union
of the two sets. The behavior of this operation is undefined if the specified collection is modified while the operation is in progress.
This implementation iterates over the specified collection, checking each element returned by the iterator in turn to see if it's contained in this collection. If all elements are so contained
true
is returned, otherwise
false
.
addAll
addAll
addAll
containing elements
to be
added to
set
if this set changed as a result of the call
Throws:
NullPointerException
- if the specified collection is null
add(Object)
removeAll
public booleanremoveAll
addAll(Collection<?> c)
<? extendsE> c)
Removes from this set all of its elements that are contained in the specified collection. If the specified collection is also a set, this operation effectively modifies this set so that its value is the
asymmetric set difference
of the two sets.
This implementation iterates over the specified collection, and adds each object returned by the iterator to this collection, in turn.
Note that this implementation will throw an
UnsupportedOperationException
unless
add
is overridden (assuming the specified collection is non-empty).
removeAll
removeAll
removeAll
AbstractSet
containing
removed from
set
set
call
Throws:
ClassCastException
- if the class of an element of this set is incompatible with the specified collection (optional)
NullPointerException
- if this set contains a null element and the specified collection does not permit null elements (optional), or if the specified collection is null
remove(Object)
retainAll
public booleanretainAll
removeAll(Collection<?> c)
Retains only the elements in this set that are contained in the specified collection. In other words, removes from this set all of its elements that are not contained in the specified collection. If the specified collection is also a set, this operation effectively modifies this set so that its value is the
intersection
of the two sets.
This implementation determines which is the smaller of this set and the specified collection, by invoking the
size
method on each. If this set has fewer elements, then the implementation iterates over this set, checking each element returned by the iterator in turn to see if it is contained in the specified collection. If it is so contained, it is removed from this set with the iterator's
remove
method. If the specified collection has fewer elements, then the implementation iterates over the specified collection, removing from this set each element returned by the iterator, using this set's
remove
method.
Note that this implementation will throw an
UnsupportedOperationException
if the iterator returned by the
iterator
method does not implement the
remove
method.
retainAll
retainAll
retainAll
AbstractCollection
collection containing
elements to be
retained in
set
call
Throws:
ClassCastException
- if the class of an element of this set is incompatible with the specified collection (optional)
NullPointerException
- if this set contains a null element and the specified collection does not permit null elements (optional), or if the specified collection is null
See Also:
remove(Object)
iterator
public
Iterator
<
E
>
public booleaniterator
retainAll()
(Collection<?> c)
Returns an iterator over the elements contained in this set in the order in which these elements were added.
The returned iterator provides a snapshot of the state of the set when the iterator was constructed. No synchronization is needed while traversing the iterator. The iterator does NOT support the
This implementation iterates over this collection, checking each element returned by the iterator in turn to see if it's contained in the specified collection. If it's not so contained, it's removed from this collection with the iterator's
remove
method.
Note that this implementation will throw an
UnsupportedOperationException
if the iterator returned by the
iterator
method does not implement the
remove
method and this collection contains one or more elements not present in the specified collection.
iterator
in interface
Iterable
<
E
>
Specified by:
iterator
in interface
Collection
<
E
>
iterator
Specified by:
iterator
an iterator over the elements in this set