Prev Class | Next Class | Frames | No Frames |
Summary: Nested | Field | Method | Constr | Detail: Nested | Field | Method | Constr |
AbstractMap
org.apache.commons.collections.map.AbstractHashedMap
org.apache.commons.collections.map.AbstractLinkedMap
org.apache.commons.collections.map.LRUMap
Map
implementation with a fixed maximum size which removes
the least recently used entry if an entry is added when full.
The least recently used algorithm works on the get and put operations only.
Iteration of any kind, including setting the value by iteration, does not
change the order. Queries such as containsKey and containsValue or access
via views also do not change the order.
The map implements OrderedMap
and entries may be queried using
the bidirectional OrderedMapIterator
. The order returned is
least recently used to most recently used. Iterators from map views can
also be cast to OrderedIterator
if required.
All the available iterators can be reset back to the start by casting to
ResettableIterator
and calling reset()
.
Nested Class Summary |
Nested classes/interfaces inherited from class org.apache.commons.collections.map.AbstractLinkedMap | |
AbstractLinkedMap.EntrySetIterator , AbstractLinkedMap.KeySetIterator , AbstractLinkedMap.LinkEntry , AbstractLinkedMap.LinkIterator , AbstractLinkedMap.LinkMapIterator , AbstractLinkedMap.ValuesIterator |
Nested classes/interfaces inherited from class org.apache.commons.collections.map.AbstractHashedMap | |
AbstractHashedMap.EntrySet , AbstractHashedMap.EntrySetIterator , AbstractHashedMap.HashEntry , AbstractHashedMap.HashIterator , AbstractHashedMap.HashMapIterator , AbstractHashedMap.KeySet , AbstractHashedMap.KeySetIterator , AbstractHashedMap.Values , AbstractHashedMap.ValuesIterator |
Field Summary | |
protected static int |
|
Fields inherited from class org.apache.commons.collections.map.AbstractLinkedMap | |
header |
Fields inherited from class org.apache.commons.collections.map.AbstractHashedMap | |
DEFAULT_CAPACITY , DEFAULT_LOAD_FACTOR , DEFAULT_THRESHOLD , GETKEY_INVALID , GETVALUE_INVALID , MAXIMUM_CAPACITY , NO_NEXT_ENTRY , NO_PREVIOUS_ENTRY , NULL , REMOVE_INVALID , SETVALUE_INVALID , data , entrySet , keySet , loadFactor , modCount , size , threshold , values |
Constructor Summary | |
| |
| |
| |
| |
| |
| |
|
Method Summary | |
protected void |
|
Object |
|
protected void |
|
protected void |
|
Object |
|
boolean |
|
boolean |
|
int |
|
protected void |
|
protected boolean |
|
protected void |
|
protected void |
|
Methods inherited from class org.apache.commons.collections.map.AbstractLinkedMap | |
addEntry , clear , containsValue , createEntry , createEntrySetIterator , createKeySetIterator , createValuesIterator , entryAfter , entryBefore , firstKey , getEntry , init , lastKey , mapIterator , nextKey , orderedMapIterator , previousKey , removeEntry |
Methods inherited from class org.apache.commons.collections.map.AbstractHashedMap | |
addEntry , addMapping , calculateNewCapacity , calculateThreshold , checkCapacity , clear , clone , containsKey , containsValue , convertKey , createEntry , createEntrySetIterator , createKeySetIterator , createValuesIterator , destroyEntry , doReadObject , doWriteObject , ensureCapacity , entryHashCode , entryKey , entryNext , entrySet , entryValue , equals , get , getEntry , hash , hashCode , hashIndex , init , isEmpty , isEqualKey , isEqualValue , keySet , mapIterator , put , putAll , remove , removeEntry , removeMapping , reuseEntry , size , toString , updateEntry , values |
public LRUMap()
Constructs a new empty map with a maximum size of 100.
public LRUMap(Map map)
Constructor copying elements from another map. The maximum size is set from the map's size.
- Parameters:
map
- the map to copy
public LRUMap(Map map, boolean scanUntilRemovable)
Constructor copying elements from another map. The maximum size is set from the map's size.
- Parameters:
map
- the map to copyscanUntilRemovable
- scan until a removeable entry is found, default false
- Since:
- Commons Collections 3.1
public LRUMap(int maxSize)
Constructs a new, empty map with the specified maximum size.
- Parameters:
maxSize
- the maximum size of the map
public LRUMap(int maxSize, boolean scanUntilRemovable)
Constructs a new, empty map with the specified maximum size.
- Parameters:
maxSize
- the maximum size of the mapscanUntilRemovable
- scan until a removeable entry is found, default false
- Since:
- Commons Collections 3.1
public LRUMap(int maxSize, float loadFactor)
Constructs a new, empty map with the specified initial capacity and load factor.
- Parameters:
maxSize
- the maximum size of the map, -1 for no limit,loadFactor
- the load factor
public LRUMap(int maxSize, float loadFactor, boolean scanUntilRemovable)
Constructs a new, empty map with the specified initial capacity and load factor.
- Parameters:
maxSize
- the maximum size of the map, -1 for no limit,loadFactor
- the load factorscanUntilRemovable
- scan until a removeable entry is found, default false
- Since:
- Commons Collections 3.1
protected void addMapping(int hashIndex, int hashCode, Object key, Object value)
Adds a new key-value mapping into this map. This implementation checks the LRU size and determines whether to discard an entry or not usingremoveLRU(AbstractLinkedMap.LinkEntry)
. From Commons Collections 3.1 this method usesisFull()
rather than accessingsize
andmaxSize
directly. It also handles the scanUntilRemovable functionality.
- Overrides:
- addMapping in interface AbstractHashedMap
- Parameters:
hashIndex
- the index into the data array to store athashCode
- the hash code of the key to addkey
- the key to addvalue
- the value to add
public Object clone()
Clones the map without cloning the keys or values.
- Overrides:
- clone in interface AbstractHashedMap
- Returns:
- a shallow clone
protected void doReadObject(ObjectInputStream in) throws IOException, ClassNotFoundException
Reads the data necessary forput()
to work in the superclass.
- Overrides:
- doReadObject in interface AbstractHashedMap
protected void doWriteObject(ObjectOutputStream out) throws IOException
Writes the data necessary forput()
to work in deserialization.
- Overrides:
- doWriteObject in interface AbstractHashedMap
public Object get(Object key)
Gets the value mapped to the key specified. This operation changes the position of the key in the map to the most recently used position (first).
- Overrides:
- get in interface AbstractHashedMap
- Parameters:
key
- the key
- Returns:
- the mapped value, null if no match
public boolean isFull()
Returns true if this map is full and no new mappings can be added.
- Specified by:
- isFull in interface BoundedMap
- Returns:
true
if the map is full
public boolean isScanUntilRemovable()
Whether this LRUMap will scan until a removable entry is found when the map is full.
- Returns:
- true if this map scans
- Since:
- Commons Collections 3.1
public int maxSize()
Gets the maximum size of the map (the bound).
- Specified by:
- maxSize in interface BoundedMap
- Returns:
- the maximum number of elements the map can hold
protected void moveToMRU(AbstractLinkedMap.LinkEntry entry)
Moves an entry to the MRU position at the end of the list. This implementation moves the updated entry to the end of the list.
- Parameters:
entry
- the entry to update
protected boolean removeLRU(AbstractLinkedMap.LinkEntry entry)
Subclass method to control removal of the least recently used entry from the map. This method exists for subclasses to override. A subclass may wish to provide cleanup of resources when an entry is removed. For example:protected boolean removeLRU(LinkEntry entry) { releaseResources(entry.getValue()); // release resources held by entry return true; // actually delete entry }Alternatively, a subclass may choose to not remove the entry or selectively keep certain LRU entries. For example:protected boolean removeLRU(LinkEntry entry) { if (entry.getKey().toString().startsWith("System.")) { return false; // entry not removed from LRUMap } else { return true; // actually delete entry } }The effect of returning false is dependent on the scanUntilRemovable flag. If the flag is true, the next LRU entry will be passed to this method and so on until one returns false and is removed, or every entry in the map has been passed. If the scanUntilRemovable flag is false, the map will exceed the maximum size. NOTE: Commons Collections 3.0 passed the wrong entry to this method. This is fixed in version 3.1 onwards.
- Parameters:
entry
- the entry to be removed
protected void reuseMapping(AbstractLinkedMap.LinkEntry entry, int hashIndex, int hashCode, Object key, Object value)
Reuses an entry by removing it and moving it to a new place in the map. This method usesLRUMap
,LRUMap
andLRUMap
.
- Parameters:
entry
- the entry to reusehashIndex
- the index into the data array to store athashCode
- the hash code of the key to addkey
- the key to addvalue
- the value to add
protected void updateEntry(AbstractHashedMap.HashEntry entry, Object newValue)
Updates an existing key-value mapping. This implementation moves the updated entry to the top of the list usingmoveToMRU(AbstractLinkedMap.LinkEntry)
.
- Overrides:
- updateEntry in interface AbstractHashedMap
- Parameters:
entry
- the entry to updatenewValue
- the new value to store