Class CursorableLinkedList<E>
- Type Parameters:
E- the type of the elements in the list.
- All Implemented Interfaces:
Serializable,Iterable<E>,Collection<E>,List<E>
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 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 behavior.
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.
- Since:
- 1.0
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classDeprecated.An extendedListIteratorthat allows concurrent changes to the underlying list.protected static classDeprecated.A cursor for the sublist based on LinkedSubListIterator.Nested classes/interfaces inherited from class org.apache.commons.collections4.list.AbstractLinkedList
AbstractLinkedList.LinkedListIterator<E>, AbstractLinkedList.LinkedSubList<E>, AbstractLinkedList.LinkedSubListIterator<E>, AbstractLinkedList.Node<E> -
Constructor Summary
ConstructorsConstructorDescriptionDeprecated.Constructor that creates.CursorableLinkedList(Collection<? extends E> coll) Deprecated.Constructor that copies the specified collection -
Method Summary
Modifier and TypeMethodDescriptionprotected voidaddNode(AbstractLinkedList.Node<E> nodeToInsert, AbstractLinkedList.Node<E> insertBeforeNode) Deprecated.Inserts a new node into the list.protected voidDeprecated.Informs all of my registered cursors that the specified element was changed.protected voidDeprecated.Informs all of my registered cursors that the specified element was just added to my list.protected voidDeprecated.Informs all of my registered cursors that the specified element was just removed from my list.protected ListIterator<E> createSubListListIterator(AbstractLinkedList.LinkedSubList<E> subList, int fromIndex) Deprecated.Creates a list iterator for the sublist.cursor()Deprecated.Returns aCursorableLinkedList.Cursorfor iterating through the elements of this list.cursor(int fromIndex) Deprecated.Returns aCursorableLinkedList.Cursorfor iterating through the elements of this list starting from a specified index.protected voidinit()Deprecated.The equivalent of a default constructor called by any constructor and byreadObject.iterator()Deprecated.Returns an iterator that does not support concurrent modification.Deprecated.Returns a cursor iterator that allows changes to the underlying list in parallel.listIterator(int fromIndex) Deprecated.Returns a cursor iterator that allows changes to the underlying list in parallel.protected voidregisterCursor(CursorableLinkedList.Cursor<E> cursor) Deprecated.Registers a cursor to be notified of changes to this list.protected voidDeprecated.Removes all nodes by iteration.protected voidremoveNode(AbstractLinkedList.Node<E> node) Deprecated.Removes the specified node from the list.protected voidunregisterCursor(CursorableLinkedList.Cursor<E> cursor) Deprecated.Deregisters a cursor from the list to be notified of changes.protected voidupdateNode(AbstractLinkedList.Node<E> node, E value) Deprecated.Updates the node with a new value.Methods inherited from class org.apache.commons.collections4.list.AbstractLinkedList
add, add, addAll, addAll, addFirst, addLast, addNodeAfter, addNodeBefore, clear, contains, containsAll, createHeaderNode, createNode, createSubListIterator, doReadObject, doWriteObject, equals, get, getFirst, getLast, getNode, hashCode, indexOf, isEmpty, isEqualValue, lastIndexOf, remove, remove, removeAll, removeFirst, removeLast, retainAll, set, size, subList, toArray, toArray, toStringMethods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, waitMethods inherited from interface java.util.Collection
parallelStream, removeIf, streamMethods inherited from interface java.util.List
replaceAll, sort, spliterator
-
Constructor Details
-
CursorableLinkedList
-
CursorableLinkedList
Deprecated.Constructor that copies the specified collection- Parameters:
coll- the collection to copy
-
-
Method Details
-
addNode
protected void addNode(AbstractLinkedList.Node<E> nodeToInsert, AbstractLinkedList.Node<E> insertBeforeNode) Deprecated.Inserts a new node into the list.- Overrides:
addNodein classAbstractLinkedList<E>- Parameters:
nodeToInsert- new node to insertinsertBeforeNode- node to insert before- Throws:
NullPointerException- if either node is null
-
broadcastNodeChanged
Deprecated.Informs all of my registered cursors that the specified element was changed.- Parameters:
node- the node that was changed
-
broadcastNodeInserted
Deprecated.Informs all of my registered cursors that the specified element was just added to my list.- Parameters:
node- the node that was changed
-
broadcastNodeRemoved
Deprecated.Informs all of my registered cursors that the specified element was just removed from my list.- Parameters:
node- the node that was changed
-
createSubListListIterator
protected ListIterator<E> createSubListListIterator(AbstractLinkedList.LinkedSubList<E> subList, int fromIndex) Deprecated.Creates a list iterator for the sublist.- Overrides:
createSubListListIteratorin classAbstractLinkedList<E>- Parameters:
subList- the sublist to get an iterator forfromIndex- the index to start from, relative to the sublist- Returns:
- the list iterator for the sublist
-
cursor
Deprecated.Returns aCursorableLinkedList.Cursorfor iterating through the elements of this list.A
Cursoris aListIteratorwith an additionalclose()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 aWeakReference.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()orListIterator.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 aCursorif theclosemethod is required.- Returns:
- a new cursor iterator
-
cursor
Deprecated.Returns aCursorableLinkedList.Cursorfor iterating through the elements of this list starting from a specified index.A
Cursoris aListIteratorwith an additionalclose()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 aWeakReference.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()orListIterator.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 aCursorif theclosemethod is required.- Parameters:
fromIndex- the index to start from- Returns:
- a new cursor iterator
- Throws:
IndexOutOfBoundsException- if the index is out of range (index < 0 || index > size()).
-
init
Deprecated.The equivalent of a default constructor called by any constructor and byreadObject.- Overrides:
initin classAbstractLinkedList<E>
-
iterator
Deprecated.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 behavior is available via
listIterator(). -
listIterator
Deprecated.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()orListIterator.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).- Specified by:
listIteratorin interfaceList<E>- Overrides:
listIteratorin classAbstractLinkedList<E>- Returns:
- a new cursor iterator
-
listIterator
Deprecated.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()orListIterator.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).- Specified by:
listIteratorin interfaceList<E>- Overrides:
listIteratorin classAbstractLinkedList<E>- Parameters:
fromIndex- the index to start from- Returns:
- a new cursor iterator
-
registerCursor
Deprecated.Registers a cursor to be notified of changes to this list.- Parameters:
cursor- the cursor to register
-
removeAllNodes
Deprecated.Removes all nodes by iteration.- Overrides:
removeAllNodesin classAbstractLinkedList<E>
-
removeNode
Deprecated.Removes the specified node from the list.- Overrides:
removeNodein classAbstractLinkedList<E>- Parameters:
node- the node to remove- Throws:
NullPointerException- ifnodeis null
-
unregisterCursor
Deprecated.Deregisters a cursor from the list to be notified of changes.- Parameters:
cursor- the cursor to deregister
-
updateNode
Deprecated.Updates the node with a new value. This implementation sets the value on the node. Subclasses can override this to record the change.- Overrides:
updateNodein classAbstractLinkedList<E>- Parameters:
node- node to updatevalue- new value of the node
-
AbstractLinkedListis source incompatible with List methods added in Java 21