org.apache.commons.collections.list
Class CursorableLinkedList
- List, Serializable
public class CursorableLinkedList
implements Serializable
A
List
implementation with a
ListIterator
that
allows concurrent modifications to the underlying list.
This implementation supports all of the optional
List
operations.
It extends
AbstractLinkedList
and thus provides the
stack/queue/dequeue operations available in
java.util.LinkedList
.
The main feature of this class is the ability to modify the list and the
iterator at the same time. Both the
listIterator()
and
cursor()
methods provides access to a
Cursor
instance which extends
ListIterator
. The cursor allows changes to the list concurrent
with changes to the iterator. Note that the
iterator()
method and
sublists do
not provide this cursor behaviour.
The
Cursor
class is provided partly for backwards compatibility
and partly because it allows the cursor to be directly closed. Closing the
cursor is optional because references are held via a
WeakReference
.
For most purposes, simply modify the iterator and list at will, and then let
the garbage collector to the rest.
Note that this implementation is not synchronized.
$Revision: 1.5 $ $Date: 2004/02/18 01:12:26 $- Rodney Waldhoff
- Janek Bogucki
- Simon Kitching
- Stephen Colebourne
protected List | cursors - A list of the cursor currently open on this list
|
add , add , addAll , addAll , addFirst , addLast , addNode , addNodeAfter , addNodeBefore , clear , contains , containsAll , createHeaderNode , createNode , createSubListIterator , createSubListListIterator , doReadObject , doWriteObject , equals , get , getFirst , getLast , getNode , hashCode , indexOf , init , isEmpty , isEqualValue , iterator , lastIndexOf , listIterator , listIterator , remove , remove , removeAll , removeAllNodes , removeFirst , removeLast , removeNode , retainAll , set , size , subList , toArray , toArray , toString , updateNode |
cursors
protected List cursors
A list of the cursor currently open on this list
CursorableLinkedList
public CursorableLinkedList()
Constructor that creates.
CursorableLinkedList
public CursorableLinkedList(Collection coll)
Constructor that copies the specified collection
coll
- the collection to copy
broadcastNodeChanged
protected void broadcastNodeChanged(AbstractLinkedList.Node node)
Informs all of my registered cursors that the specified
element was changed.
node
- the node that was changed
broadcastNodeInserted
protected void broadcastNodeInserted(AbstractLinkedList.Node node)
Informs all of my registered cursors that the specified
element was just added to my list.
node
- the node that was changed
broadcastNodeRemoved
protected void broadcastNodeRemoved(AbstractLinkedList.Node node)
Informs all of my registered cursors that the specified
element was just removed from my list.
node
- the node that was changed
cursor
public CursorableLinkedList.Cursor cursor()
Returns a
CursorableLinkedList.Cursor
for iterating through the elements of this list.
A
Cursor
is a
ListIterator
with an additional
close()
method. Calling this method immediately discards the
references to the cursor. If it is not called, then the garbage collector
will still remove the reference as it is held via a
WeakReference
.
The cursor enables iteration and list changes to occur in any order without
invalidating the iterator (from one thread). When elements are added to the
list, an event is fired to all active cursors enabling them to adjust to the
change in the list.
When the "current" (i.e., last returned by
ListIterator.next
or
ListIterator.previous
) element of the list is removed,
the cursor automatically adjusts to the change (invalidating the
last returned value such that it cannot be removed).
The
listIterator()
method returns the same as this method, and can
be cast to a
Cursor
if the
close
method is required.
cursor
public CursorableLinkedList.Cursor cursor(int fromIndex)
Returns a
CursorableLinkedList.Cursor
for iterating through the elements of this list
starting from a specified index.
A
Cursor
is a
ListIterator
with an additional
close()
method. Calling this method immediately discards the
references to the cursor. If it is not called, then the garbage collector
will still remove the reference as it is held via a
WeakReference
.
The cursor enables iteration and list changes to occur in any order without
invalidating the iterator (from one thread). When elements are added to the
list, an event is fired to all active cursors enabling them to adjust to the
change in the list.
When the "current" (i.e., last returned by
ListIterator.next
or
ListIterator.previous
) element of the list is removed,
the cursor automatically adjusts to the change (invalidating the
last returned value such that it cannot be removed).
The
listIterator(int)
method returns the same as this method, and can
be cast to a
Cursor
if the
close
method is required.
fromIndex
- the index to start from
init
protected void init()
The equivalent of a default constructor called
by any constructor and by readObject
.
- init in interface AbstractLinkedList
iterator
public Iterator iterator()
Returns an iterator that does
not support concurrent modification.
If the underlying list is modified while iterating using this iterator
a ConcurrentModificationException will occur.
The cursor behaviour is available via
listIterator()
.
- iterator in interface AbstractLinkedList
- a new iterator that does not support concurrent modification
listIterator
public ListIterator listIterator()
Returns a cursor iterator that allows changes to the underlying list in parallel.
The cursor enables iteration and list changes to occur in any order without
invalidating the iterator (from one thread). When elements are added to the
list, an event is fired to all active cursors enabling them to adjust to the
change in the list.
When the "current" (i.e., last returned by
ListIterator.next
or
ListIterator.previous
) element of the list is removed,
the cursor automatically adjusts to the change (invalidating the
last returned value such that it cannot be removed).
- listIterator in interface AbstractLinkedList
listIterator
public ListIterator listIterator(int fromIndex)
Returns a cursor iterator that allows changes to the underlying list in parallel.
The cursor enables iteration and list changes to occur in any order without
invalidating the iterator (from one thread). When elements are added to the
list, an event is fired to all active cursors enabling them to adjust to the
change in the list.
When the "current" (i.e., last returned by
ListIterator.next
or
ListIterator.previous
) element of the list is removed,
the cursor automatically adjusts to the change (invalidating the
last returned value such that it cannot be removed).
- listIterator in interface AbstractLinkedList
fromIndex
- the index to start from
registerCursor
protected void registerCursor(CursorableLinkedList.Cursor cursor)
Registers a cursor to be notified of changes to this list.
cursor
- the cursor to register
unregisterCursor
protected void unregisterCursor(CursorableLinkedList.Cursor cursor)
Deregisters a cursor from the list to be notified of changes.
cursor
- the cursor to deregister
updateNode
protected void updateNode(AbstractLinkedList.Node node,
Object value)
Updates the node with a new value.
This implementation sets the value on the node.
Subclasses can override this to record the change.
- updateNode in interface AbstractLinkedList
node
- node to updatevalue
- new value of the node
Copyright © 2001-2006 Apache Software Foundation. All Rights Reserved.