org.apache.commons.collections4.list

## Class NodeCachingLinkedList<E>

- java.lang.Object
- - org.apache.commons.collections4.list.AbstractLinkedList<E>
  - - org.apache.commons.collections4.list.NodeCachingLinkedList<E>

- All Implemented Interfaces:
    Serializable, Iterable<E>, Collection<E>, List<E>

      public class NodeCachingLinkedList<E>
      extends AbstractLinkedList<E>
      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:
    3.0
  Version:
    $Id: NodeCachingLinkedList.java 1533984 2013-10-20 21:12:51Z tn $
  See Also:
    Serialized Form

- - ### Nested Class Summary

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

    Constructors
    Constructor and Description
    `NodeCachingLinkedList()` Constructor that creates.
    `NodeCachingLinkedList(Collection<? extends E> coll)` Constructor that copies the specified collection
    `NodeCachingLinkedList(int maximumCacheSize)` Constructor that species the maximum cache size.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected void` | `addNodeToCache(AbstractLinkedList.Node<E> node)` Adds a node to the cache, if the cache isn't full.
    `protected AbstractLinkedList.Node<E>` | `createNode(E 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<E>` | `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<E> 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.collections4.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`

- - ### Constructor Detail

    - #### NodeCachingLinkedList

          public NodeCachingLinkedList()

      Constructor that creates.

    - #### NodeCachingLinkedList

          public NodeCachingLinkedList(Collection<? extends E> 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<E> 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<E> 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<E> createNode(E value)

      Creates a new node, either by reusing one from the cache or creating a new one.
      Overrides:
        `createNode` in class `AbstractLinkedList<E>`
      Parameters:
        `value` - value of the new node
      Returns:
        the newly created node

    - #### removeNode

          protected void removeNode(AbstractLinkedList.Node<E> 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<E>`
      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<E>`

Copyright © 2001–2015 The Apache Software Foundation. All rights reserved.