## 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:
  java.io.Serializable, java.lang.Iterable, java.util.Collection, java.util.List

    public class NodeCachingLinkedList

extends AbstractLinkedList
implements java.io.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: 646777 $ $Date: 2008-04-10 13:33:15 +0100 (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
`protected int` `cacheSize` The size of the cache.
`protected static int` `DEFAULT_MAXIMUM_CACHE_SIZE` The default value for `maximumCacheSize`.
`protected AbstractLinkedList.Node` `firstCachedNode` The first cached node, or `null` 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
`NodeCachingLinkedList()` Constructor that creates.
`NodeCachingLinkedList(java.util.Collection coll)` Constructor that copies the specified collection
`NodeCachingLinkedList(int maximumCacheSize)` Constructor that species the maximum cache size.

Method Summary
`protected void` `addNodeToCache(AbstractLinkedList.Node node)` Adds a node to the cache, if the cache isn't full.
`protected AbstractLinkedList.Node` `createNode(java.lang.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`

Field Detail

### DEFAULT_MAXIMUM_CACHE_SIZE

    protected static final int DEFAULT_MAXIMUM_CACHE_SIZE

  The default value for `maximumCacheSize`.

  See Also:
    Constant Field Values

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

### 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(java.util.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 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

### 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(java.lang.Object value)

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

  Overrides:
    `createNode` in class `AbstractLinkedList`
  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 class `AbstractLinkedList`
  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 class `AbstractLinkedList`

Copyright © 2001-2008 The Apache Software Foundation. All Rights Reserved.