Class NodeCachingLinkedList
- java.lang.Object
-
- org.apache.commons.collections.list.AbstractLinkedList
-
- org.apache.commons.collections.list.NodeCachingLinkedList
-
- All Implemented Interfaces:
Serializable
,Iterable
,Collection
,List
public class NodeCachingLinkedList extends AbstractLinkedList implements Serializable
AList
implementation that stores a cache of internal Node objects in an effort to reduce wasteful object creation.A linked list creates one Node for each item of data added. This can result in a lot of object creation and garbage collection. This implementation seeks to avoid that by maintaining a store of cached nodes.
This implementation is suitable for long-lived lists where both add and remove are used. Short-lived lists, or lists which only grow will have worse performance using this class.
Note that this implementation is not synchronized.
- Since:
- Commons Collections 3.0
- Version:
- $Revision: 646777 $ $Date: 2008-04-10 14:33:15 +0200 (Thu, 10 Apr 2008) $
- Author:
- Jeff Varszegi, Rich Dougherty, Phil Steitz, Stephen Colebourne
- See Also:
- Serialized Form
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.apache.commons.collections.list.AbstractLinkedList
AbstractLinkedList.LinkedListIterator, AbstractLinkedList.LinkedSubList, AbstractLinkedList.LinkedSubListIterator, AbstractLinkedList.Node
-
-
Field Summary
Fields Modifier and Type Field Description protected int
cacheSize
The size of the cache.protected static int
DEFAULT_MAXIMUM_CACHE_SIZE
The default value formaximumCacheSize
.protected AbstractLinkedList.Node
firstCachedNode
The first cached node, ornull
if no nodes are cached.protected int
maximumCacheSize
The maximum size of the cache.-
Fields inherited from class org.apache.commons.collections.list.AbstractLinkedList
header, modCount, size
-
-
Constructor Summary
Constructors Constructor Description NodeCachingLinkedList()
Constructor that creates.NodeCachingLinkedList(int maximumCacheSize)
Constructor that species the maximum cache size.NodeCachingLinkedList(Collection coll)
Constructor that copies the specified collection
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
addNodeToCache(AbstractLinkedList.Node node)
Adds a node to the cache, if the cache isn't full.protected AbstractLinkedList.Node
createNode(Object value)
Creates a new node, either by reusing one from the cache or creating a new one.protected int
getMaximumCacheSize()
Gets the maximum size of the cache.protected AbstractLinkedList.Node
getNodeFromCache()
Gets a node from the cache.protected boolean
isCacheFull()
Checks whether the cache is full.protected void
removeAllNodes()
Removes all the nodes from the list, storing as many as required in the cache for reuse.protected void
removeNode(AbstractLinkedList.Node node)
Removes the node from the list, storing it in the cache for reuse if the cache is not yet full.protected void
setMaximumCacheSize(int maximumCacheSize)
Sets the maximum size of the cache.protected void
shrinkCacheToMaximumSize()
Reduce the size of the cache to the maximum, if necessary.-
Methods inherited from class org.apache.commons.collections.list.AbstractLinkedList
add, add, addAll, addAll, addFirst, addLast, addNode, addNodeAfter, addNodeBefore, clear, contains, containsAll, createHeaderNode, createSubListIterator, createSubListListIterator, doReadObject, doWriteObject, equals, get, getFirst, getLast, getNode, hashCode, indexOf, init, isEmpty, isEqualValue, iterator, lastIndexOf, listIterator, listIterator, remove, remove, removeAll, removeFirst, removeLast, retainAll, set, size, subList, toArray, toArray, toString, updateNode
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface java.util.Collection
parallelStream, removeIf, stream, toArray
-
Methods inherited from interface java.util.List
replaceAll, sort, spliterator
-
-
-
-
Field Detail
-
DEFAULT_MAXIMUM_CACHE_SIZE
protected static final int DEFAULT_MAXIMUM_CACHE_SIZE
The default value formaximumCacheSize
.- See Also:
- Constant Field Values
-
firstCachedNode
protected transient AbstractLinkedList.Node firstCachedNode
The first cached node, ornull
if no nodes are cached. Cached nodes are stored in a singly-linked list withnext
pointing to the next element.
-
cacheSize
protected transient int cacheSize
The size of the cache.
-
maximumCacheSize
protected int maximumCacheSize
The maximum size of the cache.
-
-
Constructor Detail
-
NodeCachingLinkedList
public NodeCachingLinkedList()
Constructor that creates.
-
NodeCachingLinkedList
public NodeCachingLinkedList(Collection coll)
Constructor that copies the specified collection- Parameters:
coll
- the collection to copy
-
NodeCachingLinkedList
public NodeCachingLinkedList(int maximumCacheSize)
Constructor that species the maximum cache size.- Parameters:
maximumCacheSize
- the maximum cache size
-
-
Method Detail
-
getMaximumCacheSize
protected int getMaximumCacheSize()
Gets the maximum size of the cache.- Returns:
- the maximum cache size
-
setMaximumCacheSize
protected void setMaximumCacheSize(int maximumCacheSize)
Sets the maximum size of the cache.- Parameters:
maximumCacheSize
- the new maximum cache size
-
shrinkCacheToMaximumSize
protected void shrinkCacheToMaximumSize()
Reduce the size of the cache to the maximum, if necessary.
-
getNodeFromCache
protected AbstractLinkedList.Node getNodeFromCache()
Gets a node from the cache. If a node is returned, then the value ofcacheSize
is decreased accordingly. The node that is returned will havenull
values for next, previous and element.- Returns:
- a node, or
null
if there are no nodes in the cache.
-
isCacheFull
protected boolean isCacheFull()
Checks whether the cache is full.- Returns:
- true if the cache is full
-
addNodeToCache
protected void addNodeToCache(AbstractLinkedList.Node node)
Adds a node to the cache, if the cache isn't full. The node's contents are cleared to so they can be garbage collected.- Parameters:
node
- the node to add to the cache
-
createNode
protected AbstractLinkedList.Node createNode(Object value)
Creates a new node, either by reusing one from the cache or creating a new one.- Overrides:
createNode
in classAbstractLinkedList
- Parameters:
value
- value of the new node- Returns:
- the newly created node
-
removeNode
protected void removeNode(AbstractLinkedList.Node node)
Removes the node from the list, storing it in the cache for reuse if the cache is not yet full.- Overrides:
removeNode
in classAbstractLinkedList
- Parameters:
node
- the node to remove
-
removeAllNodes
protected void removeAllNodes()
Removes all the nodes from the list, storing as many as required in the cache for reuse.- Overrides:
removeAllNodes
in classAbstractLinkedList
-
-