⇒ Index (Frames) |  ⇒ Index (No Frames) |  ⇒ Package |  ⇒ Package Tree |  ⇒ Full Tree 
org.apache.commons.collections.list

Class NodeCachingLinkedList

java.lang.Object
|
+--org.apache.commons.collections.list.AbstractLinkedList
   |
   +--org.apache.commons.collections.list.NodeCachingLinkedList

All Implemented Interfaces:
List, Serializable


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
Authors:
Jeff Varszegi
Rich Dougherty
Phil Steitz
Stephen Colebourne

Field Summary

transient int

cacheSize

The size of the cache.

static int

DEFAULT_MAXIMUM_CACHE_SIZE

The default value for #maximumCacheSize.

transient AbstractLinkedList.Node

firstCachedNode

The first cached node, or null if no nodes are cached.

int

maximumCacheSize

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

void

addNodeToCache(AbstractLinkedList.Node node)

Adds a node to the cache, if the cache isn't full.

AbstractLinkedList.Node

createNode(Object value)

Creates a new node, either by reusing one from the cache or creating a new one.

int

getMaximumCacheSize()

Gets the maximum size of the cache.

AbstractLinkedList.Node

getNodeFromCache()

Gets a node from the cache.

boolean

isCacheFull()

Checks whether the cache is full.

void

removeAllNodes()

Removes all the nodes from the list, storing as many as required in the cache for reuse.

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.

void

setMaximumCacheSize(int maximumCacheSize)

Sets the maximum size of the cache.

void

shrinkCacheToMaximumSize()

Reduce the size of the cache to the maximum, if necessary.

Field Details

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 AbstractLinkedList.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 Details

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 Details

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.

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 AbstractLinkedList.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(AbstractLinkedList.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.