E
- the type of elements returned by the iteratorpublic class CloneIterator<E>
extends java.lang.Object
implements java.util.Iterator<E>
CloneIterator
iterates over a copy of a collection,
allowing for concurrent access to the original collection.
The original collection passed to the CloneIterator
's
constructor should be synchronized (e.g. Vector
);
otherwise you run the risk of a corrupted collection.
By default, a CloneIterator
does not support the
remove()
operation; this is because it does not have
access to the original collection. But if the CloneIterator
is supplied with an CloneIterator.Remover
it will delegate the
remove()
operation to the CloneIterator.Remover
.
Alternatively, a subclass can override the remove(Object)
method.
Modifier and Type | Class and Description |
---|---|
static interface |
CloneIterator.Remover<T>
Used by
CloneIterator to remove
elements from the original collection; since the iterator
does not have direct access to the original collection. |
Modifier | Constructor and Description |
---|---|
protected |
CloneIterator(CloneIterator.Remover<E> remover,
java.lang.Object... array)
Internal constructor used by subclasses.
|
|
CloneIterator(java.util.Collection<? extends E> collection)
Construct an iterator on a copy of the specified collection.
|
|
CloneIterator(java.util.Collection<? extends E> collection,
CloneIterator.Remover<E> remover)
Construct an iterator on a copy of the specified collection.
|
|
CloneIterator(E[] array)
Construct an iterator on a copy of the specified array.
|
|
CloneIterator(E[] array,
CloneIterator.Remover<E> remover)
Construct an iterator on a copy of the specified array.
|
Modifier and Type | Method and Description |
---|---|
boolean |
hasNext() |
protected E |
nestedNext()
The collection passed in during construction held elements of type
E ,
so this cast is not a problem. |
E |
next() |
void |
remove() |
protected void |
remove(E e)
Remove the specified element from the original collection.
|
public CloneIterator(java.util.Collection<? extends E> collection)
remove()
method will not be supported,
unless a subclass overrides the remove(Object)
.public CloneIterator(E[] array)
remove()
method will not be supported,
unless a subclass overrides the remove(Object)
.public CloneIterator(java.util.Collection<? extends E> collection, CloneIterator.Remover<E> remover)
public CloneIterator(E[] array, CloneIterator.Remover<E> remover)
protected CloneIterator(CloneIterator.Remover<E> remover, java.lang.Object... array)
public boolean hasNext()
hasNext
in interface java.util.Iterator<E>
public void remove()
remove
in interface java.util.Iterator<E>
protected E nestedNext()
E
,
so this cast is not a problem. We need this cast because
all the elements of the original collection were copied into
an object array (Object[]
).protected void remove(E e)
This method can be overridden by a subclass as an
alternative to building a CloneIterator.Remover
.