Class LruCache<K,​V>

  • Direct Known Subclasses:
    BoundedLruCache

    public class LruCache<K,​V>
    extends java.lang.Object
    An LRU cache. Entries are ordered in the cache from most recently accessed to least recently accessed. When a cache entry is accessed via get or put methods, it is moved to the most recently used position in the cache. No other public methods generate entry accesses.
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      protected static class  LruCache.Entry<K,​V>
      An LRU cache entry.
    • Constructor Summary

      Constructors 
      Constructor Description
      LruCache()  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected void add​(LruCache.Entry<K,​V> entry)
      Adds a new entry to this cache in response to put(Object, Object).
      void clear()
      Removes all entries from this cache.
      protected void doAdd​(LruCache.Entry<K,​V> entry)
      Actually adds a new entry to this cache.
      protected void doRemove​(LruCache.Entry<K,​V> entry)
      Actually removes an existing entry from this cache.
      protected LruCache.Entry<K,​V> entryByKey​(java.lang.Object key)
      Returns the corresponding entry for the given key, or null if this cache contains no entry for the key.
      V get​(java.lang.Object key)
      Returns the corresponding value for the given key and moves the corresponding entry to the most recently used position in this cache.
      protected LruCache.Entry<K,​V> getLruEntry()
      Returns the least recently used cache entry, or null if this cache is empty.
      protected LruCache.Entry<K,​V> getMruEntry()
      Returns the most recently used cache entry, or null if this cache is empty.
      boolean isEmpty()
      Returns whether this cache is empty.
      protected void moveToMru​(LruCache.Entry<K,​V> entry)
      Moves an existing cache entry to the MRU position.
      protected LruCache.Entry<K,​V> newEntry​(K key, V value)
      Creates a new cache entry with the given key and value.
      V peek​(java.lang.Object key)
      Returns the corresponding value for the given key without disturbing cache ordering, or null if this cache contains no value for the key.
      V put​(K key, V value)
      Caches the given value for the given key and moves the corresponding entry to the most recently used position in this cache.
      V remove​(java.lang.Object key)
      Removes the cache entry for the given key if it is present.
      protected void remove​(LruCache.Entry<K,​V> entry)
      Removes an existing entry from this cache in response to remove(Object).
      int size()
      Returns the size of this cache.
      java.util.Map<K,​V> snapshot()
      Returns a snapshot of the current contents of this cache, ordered from most recently accessed to least recently accessed.
      java.lang.String toString()  
      protected void update​(LruCache.Entry<K,​V> entry, V value)
      Updates an existing cache entry to change its value and moves it to the MRU position in response to put(Object, Object).
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Constructor Detail

      • LruCache

        public LruCache()
    • Method Detail

      • size

        public final int size()
        Returns the size of this cache.
        Returns:
        the size of the cache
      • isEmpty

        public final boolean isEmpty()
        Returns whether this cache is empty.
        Returns:
        true if the cache is empty, and false otherwise
      • get

        public final V get​(java.lang.Object key)
        Returns the corresponding value for the given key and moves the corresponding entry to the most recently used position in this cache. If the cache contains no value for the key, null is returned.
        Parameters:
        key - the key whose corresponding value is to be returned
        Returns:
        the corresponding value for the given key, or null if the cache contains no value for the key
      • peek

        public final V peek​(java.lang.Object key)
        Returns the corresponding value for the given key without disturbing cache ordering, or null if this cache contains no value for the key.
        Parameters:
        key - the key whose corresponding value is to be returned
        Returns:
        the corresponding value for the given key, or null if the cache contains no value for the key
      • put

        public final V put​(K key,
                           V value)
        Caches the given value for the given key and moves the corresponding entry to the most recently used position in this cache. Returns the previous value of the updated cache entry, or null if the cache contained no value for the key.
        Parameters:
        key - the key for which the given value is to be cached (not null)
        value - the value to be cached for the given key (not null)
        Returns:
        the previous value of the updated cache entry, or null if the cache contained no value for the key
      • remove

        public final V remove​(java.lang.Object key)
        Removes the cache entry for the given key if it is present. Returns the value of the removed cache entry, or null if this cache contained no value for the key.
        Parameters:
        key - the key whose entry is to be removed from the cache
        Returns:
        the value of the removed cache entry, or null if the cache contained no value for the key
      • clear

        public void clear()
        Removes all entries from this cache.
      • snapshot

        public final java.util.Map<K,​V> snapshot()
        Returns a snapshot of the current contents of this cache, ordered from most recently accessed to least recently accessed.
        Returns:
        a snapshot of the current contents of the cache (never null)
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • getMruEntry

        protected final LruCache.Entry<K,​V> getMruEntry()
        Returns the most recently used cache entry, or null if this cache is empty.
        Returns:
        the MRU entry, or null if the cache is empty
      • getLruEntry

        protected final LruCache.Entry<K,​V> getLruEntry()
        Returns the least recently used cache entry, or null if this cache is empty.
        Returns:
        the LRU entry, or null if the cache is empty
      • entryByKey

        protected final LruCache.Entry<K,​V> entryByKey​(java.lang.Object key)
        Returns the corresponding entry for the given key, or null if this cache contains no entry for the key.
        Parameters:
        key - the key whose corresponding entry is to be returned
        Returns:
        the corresponding entry for the given key, or null if the cache contains no entry for the key
      • newEntry

        protected LruCache.Entry<K,​V> newEntry​(K key,
                                                     V value)
        Creates a new cache entry with the given key and value.
        Parameters:
        key - the key of the new entry (never null)
        value - the value of the new entry (never null)
        Returns:
        the created entry (not null)
      • update

        protected void update​(LruCache.Entry<K,​V> entry,
                              V value)
        Updates an existing cache entry to change its value and moves it to the MRU position in response to put(Object, Object).

        This implementation changes the entry value and then invokes moveToMru(Entry).

        Parameters:
        entry - the entry to update (never null)
        value - a new value for the entry (never null)
      • remove

        protected void remove​(LruCache.Entry<K,​V> entry)
        Removes an existing entry from this cache in response to remove(Object).

        This implementation invokes doRemove(Entry).

        Parameters:
        entry - the entry to remove (never null)
      • doAdd

        protected void doAdd​(LruCache.Entry<K,​V> entry)
        Actually adds a new entry to this cache.
        Parameters:
        entry - the entry to add (never null)
      • doRemove

        protected void doRemove​(LruCache.Entry<K,​V> entry)
        Actually removes an existing entry from this cache.
        Parameters:
        entry - the entry to remove (never null)
      • moveToMru

        protected void moveToMru​(LruCache.Entry<K,​V> entry)
        Moves an existing cache entry to the MRU position.
        Parameters:
        entry - the entry to move (never null)