com.twelvemonkeys.util
Class LRUHashMap<K,V>

java.lang.Object
  extended by java.util.AbstractMap<K,V>
      extended by java.util.HashMap<K,V>
          extended by java.util.LinkedHashMap<K,V>
              extended by com.twelvemonkeys.util.LRUHashMap<K,V>
All Implemented Interfaces:
ExpiringMap<K,V>, Serializable, Cloneable, Map<K,V>

public class LRUHashMap<K,V>
extends LinkedHashMap<K,V>
implements ExpiringMap<K,V>

Map implementation with size limit, that keeps its entries in LRU (least recently used) order, also known as access-order. When the size limit is reached, the least recently accessed mappings are removed. The number of mappings to be removed from the map, is controlled by the trim factor.

Version:
$Id: //depot/branches/personal/haraldk/twelvemonkeys/release-2/twelvemonkeys-core/src/main/java/com/twelvemonkeys/util/LRUHashMap.java#1 $
Author:
Harald Kuhr
See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class java.util.AbstractMap
AbstractMap.SimpleEntry<K,V>, AbstractMap.SimpleImmutableEntry<K,V>
 
Nested classes/interfaces inherited from interface java.util.Map
Map.Entry<K,V>
 
Constructor Summary
LRUHashMap()
          Creates an LRUHashMap with default max size (1000 entries).
LRUHashMap(int pMaxSize)
          Creates an LRUHashMap with the given max size.
LRUHashMap(Map<? extends K,? extends V> pContents)
          Creates an LRUHashMap with initial mappings from the given map, and default max size (1000 entries).
LRUHashMap(Map<? extends K,? extends V> pContents, int pMaxSize)
          Creates an LRUHashMap with initial mappings from the given map, and the given max size.
 
Method Summary
 int getMaxSize()
          Returns the maximum number of mappings in this map.
 float getTrimFactor()
          Returns the current trim factor.
 void processRemoved(Map.Entry<K,V> pRemoved)
          Default implementation does nothing.
protected  boolean removeEldestEntry(Map.Entry<K,V> pEldest)
          always returns false, and instead invokes removeLRU() if size >= maxSize.
 void removeLRU()
          Removes the least recently used mapping(s) from this map.
 void setMaxSize(int pMaxSize)
          Sets the maximum number of elements in this map.
 void setTrimFactor(float pTrimFactor)
          Sets the trim factor.
 
Methods inherited from class java.util.LinkedHashMap
clear, containsValue, get
 
Methods inherited from class java.util.HashMap
clone, containsKey, entrySet, isEmpty, keySet, put, putAll, remove, size, values
 
Methods inherited from class java.util.AbstractMap
equals, hashCode, toString
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface java.util.Map
clear, containsKey, containsValue, entrySet, equals, get, hashCode, isEmpty, keySet, put, putAll, remove, size, values
 

Constructor Detail

LRUHashMap

public LRUHashMap()
Creates an LRUHashMap with default max size (1000 entries). This is constructor is here to comply with the reccomendations for "standard" constructors in the Map interface.

See Also:
LRUHashMap(int)

LRUHashMap

public LRUHashMap(int pMaxSize)
Creates an LRUHashMap with the given max size.

Parameters:
pMaxSize - size limit

LRUHashMap

public LRUHashMap(Map<? extends K,? extends V> pContents)
Creates an LRUHashMap with initial mappings from the given map, and default max size (1000 entries). This is constructor is here to comply with the reccomendations for "standard" constructors in the Map interface.

Parameters:
pContents - the map whose mappings are to be placed in this map. May be null.
See Also:
LRUHashMap(java.util.Map, int)

LRUHashMap

public LRUHashMap(Map<? extends K,? extends V> pContents,
                  int pMaxSize)
Creates an LRUHashMap with initial mappings from the given map, and the given max size.

Parameters:
pContents - the map whose mappings are to be placed in this map. May be null.
pMaxSize - size limit
Method Detail

getMaxSize

public int getMaxSize()
Returns the maximum number of mappings in this map.

Returns:
the size limit

setMaxSize

public void setMaxSize(int pMaxSize)
Sets the maximum number of elements in this map. If the current size is greater than the new max size, the map will be trimmed to fit the new max size constraint.

Parameters:
pMaxSize - new size limit
See Also:
removeLRU()

getTrimFactor

public float getTrimFactor()
Returns the current trim factor.

The trim factor controls how many percent of the maps current size is reclaimed, when performing an removeLRU operation. Defaults to 1% (0.01f).

Returns:
the current trim factor

setTrimFactor

public void setTrimFactor(float pTrimFactor)
Sets the trim factor.

The trim factor controls how many percent of the maps current size is reclaimed, when performing an removeLRU operation. Defaults to 1% (0.01f).

Parameters:
pTrimFactor - the new trim factor. Acceptable values are between 0 (inclusive) and 1 (exclusive).
See Also:
removeLRU()

removeEldestEntry

protected boolean removeEldestEntry(Map.Entry<K,V> pEldest)
always returns false, and instead invokes removeLRU() if size >= maxSize.

Overrides:
removeEldestEntry in class LinkedHashMap<K,V>

processRemoved

public void processRemoved(Map.Entry<K,V> pRemoved)
Default implementation does nothing. May be used by clients as a call-back to notify when mappings expire from the map.

Specified by:
processRemoved in interface ExpiringMap<K,V>
Parameters:
pRemoved - the removed mapping

removeLRU

public void removeLRU()
Removes the least recently used mapping(s) from this map.

How many mappings are removed from the map, is controlled by the trim factor. In any case, at least one mapping will be removed.

See Also:
getTrimFactor()


Copyright © 2014. All Rights Reserved.