java.lang.Object | ||||
↳ | java.util.AbstractMap<K, V> | |||
↳ | org.apache.commons.collections.map.AbstractHashedMap | |||
↳ | org.apache.commons.collections.map.AbstractLinkedMap | |||
↳ | org.apache.commons.collections.map.LRUMap |
A 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()
.
Note that LRUMap is not synchronized and is not thread-safe.
If you wish to use this map from multiple threads concurrently, you must use
appropriate synchronization. The simplest approach is to wrap this map
using synchronizedMap(Map)
. This class may throw
NullPointerException
's when accessed by concurrent threads.
Constants | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
int | DEFAULT_MAX_SIZE | Default maximum size |
[Expand]
Inherited Constants | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
From class
org.apache.commons.collections.map.AbstractHashedMap
|
[Expand]
Inherited Fields | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
From class
org.apache.commons.collections.map.AbstractLinkedMap
| |||||||||||
From class
org.apache.commons.collections.map.AbstractHashedMap
|
Public Constructors | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Constructs a new empty map with a maximum size of 100.
| |||||||||||
Constructs a new, empty map with the specified maximum size.
| |||||||||||
Constructs a new, empty map with the specified maximum size.
| |||||||||||
Constructs a new, empty map with the specified initial capacity and
load factor.
| |||||||||||
Constructs a new, empty map with the specified initial capacity and
load factor.
| |||||||||||
Constructor copying elements from another map.
| |||||||||||
Constructor copying elements from another map.
|
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Clones the map without cloning the keys or values.
| |||||||||||
Gets the value mapped to the key specified.
| |||||||||||
Returns true if this map is full and no new mappings can be added.
| |||||||||||
Whether this LRUMap will scan until a removable entry is found when the
map is full.
| |||||||||||
Gets the maximum size of the map (the bound).
|
Protected Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Adds a new key-value mapping into this map.
| |||||||||||
Reads the data necessary for
put() to work in the superclass. | |||||||||||
Writes the data necessary for
put() to work in deserialization. | |||||||||||
Moves an entry to the MRU position at the end of the list.
| |||||||||||
Subclass method to control removal of the least recently used entry from the map.
| |||||||||||
Reuses an entry by removing it and moving it to a new place in the map.
| |||||||||||
Updates an existing key-value mapping.
|
[Expand]
Inherited Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
From class
org.apache.commons.collections.map.AbstractLinkedMap
| |||||||||||
From class
org.apache.commons.collections.map.AbstractHashedMap
| |||||||||||
From class
java.util.AbstractMap
| |||||||||||
From class
java.lang.Object
| |||||||||||
From interface
java.util.Map
| |||||||||||
From interface
org.apache.commons.collections.BoundedMap
| |||||||||||
From interface
org.apache.commons.collections.IterableMap
| |||||||||||
From interface
org.apache.commons.collections.OrderedMap
|
Default maximum size
Constructs a new empty map with a maximum size of 100.
Constructs a new, empty map with the specified maximum size.
maxSize | the maximum size of the map |
---|
IllegalArgumentException | if the maximum size is less than one |
---|
Constructs a new, empty map with the specified maximum size.
maxSize | the maximum size of the map |
---|---|
scanUntilRemovable | scan until a removeable entry is found, default false |
IllegalArgumentException | if the maximum size is less than one |
---|
Constructs a new, empty map with the specified initial capacity and load factor.
maxSize | the maximum size of the map, -1 for no limit, |
---|---|
loadFactor | the load factor |
IllegalArgumentException | if the maximum size is less than one |
---|---|
IllegalArgumentException | if the load factor is less than zero |
Constructs a new, empty map with the specified initial capacity and load factor.
maxSize | the maximum size of the map, -1 for no limit, |
---|---|
loadFactor | the load factor |
scanUntilRemovable | scan until a removeable entry is found, default false |
IllegalArgumentException | if the maximum size is less than one |
---|---|
IllegalArgumentException | if the load factor is less than zero |
Constructor copying elements from another map.
The maximum size is set from the map's size.
map | the map to copy |
---|
NullPointerException | if the map is null |
---|---|
IllegalArgumentException | if the map is empty |
Constructor copying elements from another map.
The maximum size is set from the map's size.map | the map to copy |
---|---|
scanUntilRemovable | scan until a removeable entry is found, default false |
NullPointerException | if the map is null |
---|---|
IllegalArgumentException | if the map is empty |
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).
key | the key |
---|
Returns true if this map is full and no new mappings can be added.
true
if the map is full
Whether this LRUMap will scan until a removable entry is found when the map is full.
Gets the maximum size of the map (the bound).
Adds a new key-value mapping into this map.
This implementation checks the LRU size and determines whether to
discard an entry or not using removeLRU(AbstractLinkedMap.LinkEntry)
.
From Commons Collections 3.1 this method uses isFull()
rather
than accessing size
and maxSize
directly.
It also handles the scanUntilRemovable functionality.
hashIndex | the index into the data array to store at |
---|---|
hashCode | the hash code of the key to add |
key | the key to add |
value | the value to add |
Reads the data necessary for put()
to work in the superclass.
in | the input stream |
---|
Writes the data necessary for put()
to work in deserialization.
out | the output stream |
---|
IOException |
---|
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.
entry | the entry to update |
---|
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.
entry | the entry to be removed |
---|
Reuses an entry by removing it and moving it to a new place in the map.
This method uses removeEntry(AbstractHashedMap.HashEntry, int, AbstractHashedMap.HashEntry)
, reuseEntry(AbstractHashedMap.HashEntry, int, int, Object, Object)
and addEntry(AbstractHashedMap.HashEntry, int)
.
entry | the entry to reuse |
---|---|
hashIndex | the index into the data array to store at |
hashCode | the hash code of the key to add |
key | the key to add |
value | the value to add |
Updates an existing key-value mapping.
This implementation moves the updated entry to the top of the list
using moveToMRU(AbstractLinkedMap.LinkEntry)
.
entry | the entry to update |
---|---|
newValue | the new value to store |