Save This Page
Home » commons-collections-3.2.1-src » org.apache.commons » collections » list » [javadoc | source]
org.apache.commons.collections.list
public class: CursorableLinkedList [javadoc | source]
java.lang.Object
   org.apache.commons.collections.list.AbstractLinkedList
      org.apache.commons.collections.list.CursorableLinkedList

All Implemented Interfaces:
    Serializable, List

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.

Nested Class Summary:
public static class  CursorableLinkedList.Cursor  An extended ListIterator that allows concurrent changes to the underlying list. 
protected static class  CursorableLinkedList.SubCursor  A cursor for the sublist based on LinkedSubListIterator. 
Field Summary
protected transient  List cursors    A list of the cursor currently open on this list 
Fields inherited from org.apache.commons.collections.list.AbstractLinkedList:
header,  size,  modCount
Constructor:
 public CursorableLinkedList() 
 public CursorableLinkedList(Collection coll) 
    Constructor that copies the specified collection
    Parameters:
    coll - the collection to copy
Method from org.apache.commons.collections.list.CursorableLinkedList Summary:
addNode,   broadcastNodeChanged,   broadcastNodeInserted,   broadcastNodeRemoved,   createSubListListIterator,   cursor,   cursor,   init,   iterator,   listIterator,   listIterator,   registerCursor,   removeAllNodes,   removeNode,   unregisterCursor,   updateNode
Methods from org.apache.commons.collections.list.AbstractLinkedList:
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
Methods from java.lang.Object:
equals,   getClass,   hashCode,   notify,   notifyAll,   toString,   wait,   wait,   wait
Method from org.apache.commons.collections.list.CursorableLinkedList Detail:
 protected  void addNode(Node nodeToInsert,
    Node insertBeforeNode) 
    Inserts a new node into the list.
 protected  void broadcastNodeChanged(Node node) 
    Informs all of my registered cursors that the specified element was changed.
 protected  void broadcastNodeInserted(Node node) 
    Informs all of my registered cursors that the specified element was just added to my list.
 protected  void broadcastNodeRemoved(Node node) 
    Informs all of my registered cursors that the specified element was just removed from my list.
 protected ListIterator createSubListListIterator(LinkedSubList subList,
    int fromIndex) 
    Creates a list iterator for the sublist.
 public CursorableLinkedList.Cursor cursor() 
    Returns a 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.

 public CursorableLinkedList.Cursor cursor(int fromIndex) 
    Returns a 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.

 protected  void init() 
    The equivalent of a default constructor called by any constructor and by readObject.
 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() .

 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).

 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).

 protected  void registerCursor(CursorableLinkedList.Cursor cursor) 
    Registers a cursor to be notified of changes to this list.
 protected  void removeAllNodes() 
    Removes all nodes by iteration.
 protected  void removeNode(Node node) 
    Removes the specified node from the list.
 protected  void unregisterCursor(CursorableLinkedList.Cursor cursor) 
    Deregisters a cursor from the list to be notified of changes.
 protected  void updateNode(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.