Class NodeCachingLinkedList

  • All Implemented Interfaces:
    Serializable, Iterable, Collection, List

    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: 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
    • Field Detail

      • 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​(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
      • 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