|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectjava.util.AbstractMap<K,V>
org.apache.commons.collections.map.AbstractHashedMap<K,V>
org.apache.commons.collections.map.AbstractLinkedMap<K,V>
org.apache.commons.collections.map.LRUMap<K,V>
public class LRUMap<K,V>
A Map implementation with a fixed maximum size which removes
the least recently used entry if an entry is added when full.
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<K,V>, AbstractLinkedMap.KeySetIterator<K,V>, AbstractLinkedMap.LinkEntry<K,V>, AbstractLinkedMap.LinkIterator<K,V>, AbstractLinkedMap.LinkMapIterator<K,V>, AbstractLinkedMap.ValuesIterator<K,V> |
| Nested classes/interfaces inherited from class org.apache.commons.collections.map.AbstractHashedMap |
|---|
AbstractHashedMap.EntrySet<K,V>, AbstractHashedMap.HashEntry<K,V>, AbstractHashedMap.HashIterator<K,V>, AbstractHashedMap.HashMapIterator<K,V>, AbstractHashedMap.KeySet<K,V>, AbstractHashedMap.Values<K,V> |
| Nested classes/interfaces inherited from interface java.util.Map |
|---|
Map.Entry<K,V> |
| Field Summary | |
|---|---|
protected static int |
DEFAULT_MAX_SIZE
Default maximum size |
| Fields inherited from class org.apache.commons.collections.map.AbstractLinkedMap |
|---|
header |
| Fields inherited from class org.apache.commons.collections.map.AbstractHashedMap |
|---|
data, DEFAULT_CAPACITY, DEFAULT_LOAD_FACTOR, DEFAULT_THRESHOLD, entrySet, GETKEY_INVALID, GETVALUE_INVALID, keySet, loadFactor, MAXIMUM_CAPACITY, modCount, NO_NEXT_ENTRY, NO_PREVIOUS_ENTRY, NULL, REMOVE_INVALID, SETVALUE_INVALID, size, threshold, values |
| Constructor Summary | |
|---|---|
LRUMap()
Constructs a new empty map with a maximum size of 100. |
|
LRUMap(int maxSize)
Constructs a new, empty map with the specified maximum size. |
|
LRUMap(int maxSize,
boolean scanUntilRemovable)
Constructs a new, empty map with the specified maximum size. |
|
LRUMap(int maxSize,
float loadFactor)
Constructs a new, empty map with the specified initial capacity and load factor. |
|
LRUMap(int maxSize,
float loadFactor,
boolean scanUntilRemovable)
Constructs a new, empty map with the specified initial capacity and load factor. |
|
LRUMap(Map<? extends K,? extends V> map)
Constructor copying elements from another map. |
|
LRUMap(Map<? extends K,? extends V> map,
boolean scanUntilRemovable)
Constructor copying elements from another map. |
|
| Method Summary | |
|---|---|
protected void |
addMapping(int hashIndex,
int hashCode,
K key,
V value)
Adds a new key-value mapping into this map. |
Object |
clone()
Clones the map without cloning the keys or values. |
protected void |
doReadObject(ObjectInputStream in)
Reads the data necessary for put() to work in the superclass. |
protected void |
doWriteObject(ObjectOutputStream out)
Writes the data necessary for put() to work in deserialization. |
V |
get(Object key)
Gets the value mapped to the key specified. |
boolean |
isFull()
Returns true if this map is full and no new mappings can be added. |
boolean |
isScanUntilRemovable()
Whether this LRUMap will scan until a removable entry is found when the map is full. |
int |
maxSize()
Gets the maximum size of the map (the bound). |
protected void |
moveToMRU(AbstractLinkedMap.LinkEntry<K,V> entry)
Moves an entry to the MRU position at the end of the list. |
protected boolean |
removeLRU(AbstractLinkedMap.LinkEntry<K,V> entry)
Subclass method to control removal of the least recently used entry from the map. |
protected void |
reuseMapping(AbstractLinkedMap.LinkEntry<K,V> entry,
int hashIndex,
int hashCode,
K key,
V value)
Reuses an entry by removing it and moving it to a new place in the map. |
protected void |
updateEntry(AbstractHashedMap.HashEntry<K,V> entry,
V newValue)
Updates an existing key-value mapping. |
| 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 |
|---|
calculateNewCapacity, calculateThreshold, checkCapacity, containsKey, destroyEntry, ensureCapacity, entryHashCode, entryKey, entryNext, entrySet, entryValue, equals, getEntry, hash, hashCode, hashIndex, isEmpty, isEqualKey, isEqualValue, keySet, put, putAll, remove, removeMapping, reuseEntry, size, toString, values |
| 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, hashCode, isEmpty, keySet, put, putAll, remove, size, values |
| Field Detail |
|---|
protected static final int DEFAULT_MAX_SIZE
| Constructor Detail |
|---|
public LRUMap()
public LRUMap(int maxSize)
maxSize - the maximum size of the map
IllegalArgumentException - if the maximum size is less than one
public LRUMap(int maxSize,
boolean scanUntilRemovable)
maxSize - the maximum size of the mapscanUntilRemovable - scan until a removeable entry is found, default false
IllegalArgumentException - if the maximum size is less than one
public LRUMap(int maxSize,
float loadFactor)
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
public LRUMap(int maxSize,
float loadFactor,
boolean scanUntilRemovable)
maxSize - the maximum size of the map, -1 for no limit,loadFactor - the load factorscanUntilRemovable - 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 zeropublic LRUMap(Map<? extends K,? extends V> map)
map - the map to copy
NullPointerException - if the map is null
IllegalArgumentException - if the map is empty
public LRUMap(Map<? extends K,? extends V> map,
boolean scanUntilRemovable)
map - the map to copyscanUntilRemovable - scan until a removeable entry is found, default false
NullPointerException - if the map is null
IllegalArgumentException - if the map is empty| Method Detail |
|---|
public V get(Object key)
get in interface Map<K,V>get in class AbstractHashedMap<K,V>key - the key
protected void moveToMRU(AbstractLinkedMap.LinkEntry<K,V> entry)
entry - the entry to update
protected void updateEntry(AbstractHashedMap.HashEntry<K,V> entry,
V newValue)
moveToMRU(org.apache.commons.collections.map.AbstractLinkedMap.LinkEntry).
updateEntry in class AbstractHashedMap<K,V>entry - the entry to updatenewValue - the new value to store
protected void addMapping(int hashIndex,
int hashCode,
K key,
V value)
removeLRU(org.apache.commons.collections.map.AbstractLinkedMap.LinkEntry).
From Commons Collections 3.1 this method uses isFull() rather
than accessing size and maxSize directly.
It also handles the scanUntilRemovable functionality.
addMapping in class AbstractHashedMap<K,V>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
protected void reuseMapping(AbstractLinkedMap.LinkEntry<K,V> entry,
int hashIndex,
int hashCode,
K key,
V value)
AbstractLinkedMap.removeEntry(org.apache.commons.collections.map.AbstractHashedMap.HashEntry, int, org.apache.commons.collections.map.AbstractHashedMap.HashEntry) , AbstractHashedMap.reuseEntry(org.apache.commons.collections.map.AbstractHashedMap.HashEntry, int, int, K, V) and AbstractLinkedMap.addEntry(org.apache.commons.collections.map.AbstractHashedMap.HashEntry, int) .
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 addprotected boolean removeLRU(AbstractLinkedMap.LinkEntry<K,V> entry)
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 removedpublic boolean isFull()
isFull in interface BoundedMap<K,V>true if the map is fullpublic int maxSize()
maxSize in interface BoundedMap<K,V>public boolean isScanUntilRemovable()
public Object clone()
clone in class AbstractHashedMap<K,V>
protected void doWriteObject(ObjectOutputStream out)
throws IOException
put() to work in deserialization.
doWriteObject in class AbstractHashedMap<K,V>out - the output stream
IOException
protected void doReadObject(ObjectInputStream in)
throws IOException,
ClassNotFoundException
put() to work in the superclass.
doReadObject in class AbstractHashedMap<K,V>in - the input stream
IOException
ClassNotFoundException
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||