org.apache.commons.collections.list

Class NodeCachingLinkedList

public class NodeCachingLinkedList extends AbstractLinkedList implements Serializable

A List 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: 348299 $ $Date: 2005-11-22 23:51:45 +0000 (Tue, 22 Nov 2005) $

Author: Jeff Varszegi Rich Dougherty Phil Steitz Stephen Colebourne

Field Summary
protected intcacheSize
The size of the cache.
protected static intDEFAULT_MAXIMUM_CACHE_SIZE
The default value for maximumCacheSize.
protected NodefirstCachedNode
The first cached node, or null if no nodes are cached.
protected intmaximumCacheSize
The maximum size of the cache.
Constructor Summary
NodeCachingLinkedList()
Constructor that creates.
NodeCachingLinkedList(Collection coll)
Constructor that copies the specified collection
NodeCachingLinkedList(int maximumCacheSize)
Constructor that species the maximum cache size.
Method Summary
protected voidaddNodeToCache(Node node)
Adds a node to the cache, if the cache isn't full.
protected NodecreateNode(Object value)
Creates a new node, either by reusing one from the cache or creating a new one.
protected intgetMaximumCacheSize()
Gets the maximum size of the cache.
protected NodegetNodeFromCache()
Gets a node from the cache.
protected booleanisCacheFull()
Checks whether the cache is full.
protected voidremoveAllNodes()
Removes all the nodes from the list, storing as many as required in the cache for reuse.
protected voidremoveNode(Node node)
Removes the node from the list, storing it in the cache for reuse if the cache is not yet full.
protected voidsetMaximumCacheSize(int maximumCacheSize)
Sets the maximum size of the cache.
protected voidshrinkCacheToMaximumSize()
Reduce the size of the cache to the maximum, if necessary.

Field Detail

cacheSize

protected transient int cacheSize
The size of the cache.

DEFAULT_MAXIMUM_CACHE_SIZE

protected static final int DEFAULT_MAXIMUM_CACHE_SIZE
The default value for maximumCacheSize.

firstCachedNode

protected transient Node firstCachedNode
The first cached node, or null if no nodes are cached. Cached nodes are stored in a singly-linked list with next pointing to the next element.

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

addNodeToCache

protected void addNodeToCache(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 Node createNode(Object value)
Creates a new node, either by reusing one from the cache or creating a new one.

Parameters: value value of the new node

Returns: the newly created node

getMaximumCacheSize

protected int getMaximumCacheSize()
Gets the maximum size of the cache.

Returns: the maximum cache size

getNodeFromCache

protected Node getNodeFromCache()
Gets a node from the cache. If a node is returned, then the value of cacheSize is decreased accordingly. The node that is returned will have null 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

removeAllNodes

protected void removeAllNodes()
Removes all the nodes from the list, storing as many as required in the cache for reuse.

removeNode

protected void removeNode(Node node)
Removes the node from the list, storing it in the cache for reuse if the cache is not yet full.

Parameters: node the node to remove

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.
Copyright © 2001-2008 Apache Software Foundation. All Rights Reserved.