| org.apache.commons.collections.map.AbstractHashedMap org.apache.commons.collections.map.AbstractLinkedMap org.apache.commons.collections.map.LRUMap
LRUMap | public class LRUMap extends AbstractLinkedMap implements BoundedMap,Serializable,Cloneable(Code) | | 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
java.util.Collections.synchronizedMap(Map) . This class may throw
NullPointerException 's when accessed by concurrent threads.
since: Commons Collections 3.0 (previously in main package v1.0) version: $Revision: 348299 $ $Date: 2005-11-22 23:51:45 +0000 (Tue, 22 Nov 2005) $ author: James Strachan author: Morgan Delagrange author: Stephen Colebourne author: Mike Pettypiece author: Mario Ivankovits |
Constructor Summary | |
public | LRUMap() Constructs a new empty map with a maximum size of 100. | public | LRUMap(int maxSize) Constructs a new, empty map with the specified maximum size. | public | LRUMap(int maxSize, boolean scanUntilRemovable) Constructs a new, empty map with the specified maximum size. | public | LRUMap(int maxSize, float loadFactor) Constructs a new, empty map with the specified initial capacity and
load factor. | public | LRUMap(int maxSize, float loadFactor, boolean scanUntilRemovable) Constructs a new, empty map with the specified initial capacity and
load factor. | public | LRUMap(Map map) Constructor copying elements from another map. | public | LRUMap(Map map, boolean scanUntilRemovable) Constructor copying elements from another map. |
Method Summary | |
protected void | addMapping(int hashIndex, int hashCode, Object key, Object value) Adds a new key-value mapping into this map. | public 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. | public Object | get(Object key) Gets the value mapped to the key specified. | public boolean | isFull() Returns true if this map is full and no new mappings can be added. | public boolean | isScanUntilRemovable() Whether this LRUMap will scan until a removable entry is found when the
map is full. | public int | maxSize() Gets the maximum size of the map (the bound). | protected void | moveToMRU(LinkEntry entry) Moves an entry to the MRU position at the end of the list. | protected boolean | removeLRU(LinkEntry entry) Subclass method to control removal of the least recently used entry from the map.
This method exists for subclasses to override. | protected void | reuseMapping(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. | protected void | updateEntry(HashEntry entry, Object newValue) Updates an existing key-value mapping. |
DEFAULT_MAX_SIZE | final protected static int DEFAULT_MAX_SIZE(Code) | | Default maximum size
|
LRUMap | public LRUMap()(Code) | | Constructs a new empty map with a maximum size of 100.
|
LRUMap | public LRUMap(int maxSize)(Code) | | Constructs a new, empty map with the specified maximum size.
Parameters: maxSize - the maximum size of the map throws: IllegalArgumentException - if the maximum size is less than one |
LRUMap | public LRUMap(int maxSize, boolean scanUntilRemovable)(Code) | | Constructs a new, empty map with the specified maximum size.
Parameters: maxSize - the maximum size of the map Parameters: scanUntilRemovable - scan until a removeable entry is found, default false throws: IllegalArgumentException - if the maximum size is less than one since: Commons Collections 3.1 |
LRUMap | public LRUMap(int maxSize, float loadFactor)(Code) | | 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, Parameters: loadFactor - the load factor throws: IllegalArgumentException - if the maximum size is less than one throws: IllegalArgumentException - if the load factor is less than zero |
LRUMap | public LRUMap(int maxSize, float loadFactor, boolean scanUntilRemovable)(Code) | | 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, Parameters: loadFactor - the load factor Parameters: scanUntilRemovable - scan until a removeable entry is found, default false throws: IllegalArgumentException - if the maximum size is less than one throws: IllegalArgumentException - if the load factor is less than zero since: Commons Collections 3.1 |
LRUMap | public LRUMap(Map map, boolean scanUntilRemovable)(Code) | | Constructor copying elements from another map.
The maximum size is set from the map's size.
Parameters: map - the map to copy Parameters: scanUntilRemovable - scan until a removeable entry is found, default false throws: NullPointerException - if the map is null throws: IllegalArgumentException - if the map is empty since: Commons Collections 3.1 |
addMapping | protected void addMapping(int hashIndex, int hashCode, Object key, Object value)(Code) | | 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
LRUMap.removeLRU(AbstractLinkedMap.LinkEntry) .
From Commons Collections 3.1 this method uses
LRUMap.isFull() rather
than accessing size and maxSize directly.
It also handles the scanUntilRemovable functionality.
Parameters: hashIndex - the index into the data array to store at Parameters: hashCode - the hash code of the key to add Parameters: key - the key to add Parameters: value - the value to add |
clone | public Object clone()(Code) | | Clones the map without cloning the keys or values.
a shallow clone |
get | public Object get(Object key)(Code) | | 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).
Parameters: key - the key the mapped value, null if no match |
isFull | public boolean isFull()(Code) | | Returns true if this map is full and no new mappings can be added.
true if the map is full |
isScanUntilRemovable | public boolean isScanUntilRemovable()(Code) | | Whether this LRUMap will scan until a removable entry is found when the
map is full.
true if this map scans since: Commons Collections 3.1 |
maxSize | public int maxSize()(Code) | | Gets the maximum size of the map (the bound).
the maximum number of elements the map can hold |
moveToMRU | protected void moveToMRU(LinkEntry entry)(Code) | | 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 |
removeLRU | protected boolean removeLRU(LinkEntry entry)(Code) | | 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 |
reuseMapping | protected void reuseMapping(LinkEntry entry, int hashIndex, int hashCode, Object key, Object value)(Code) | | Reuses an entry by removing it and moving it to a new place in the map.
This method uses
LRUMap.removeEntry ,
LRUMap.reuseEntry and
LRUMap.addEntry .
Parameters: entry - the entry to reuse Parameters: hashIndex - the index into the data array to store at Parameters: hashCode - the hash code of the key to add Parameters: key - the key to add Parameters: value - the value to add |
updateEntry | protected void updateEntry(HashEntry entry, Object newValue)(Code) | | Updates an existing key-value mapping.
This implementation moves the updated entry to the top of the list
using
LRUMap.moveToMRU(AbstractLinkedMap.LinkEntry) .
Parameters: entry - the entry to update Parameters: newValue - the new value to store |
Fields inherited from org.apache.commons.collections.map.AbstractLinkedMap | protected transient LinkEntry header(Code)(Java Doc)
|
Methods inherited from org.apache.commons.collections.map.AbstractHashedMap | protected void addEntry(HashEntry entry, int hashIndex)(Code)(Java Doc) protected void addMapping(int hashIndex, int hashCode, Object key, Object value)(Code)(Java Doc) protected int calculateNewCapacity(int proposedCapacity)(Code)(Java Doc) protected int calculateThreshold(int newCapacity, float factor)(Code)(Java Doc) protected void checkCapacity()(Code)(Java Doc) public void clear()(Code)(Java Doc) protected Object clone()(Code)(Java Doc) public boolean containsKey(Object key)(Code)(Java Doc) public boolean containsValue(Object value)(Code)(Java Doc) protected Object convertKey(Object key)(Code)(Java Doc) protected HashEntry createEntry(HashEntry next, int hashCode, Object key, Object value)(Code)(Java Doc) protected Iterator createEntrySetIterator()(Code)(Java Doc) protected Iterator createKeySetIterator()(Code)(Java Doc) protected Iterator createValuesIterator()(Code)(Java Doc) protected void destroyEntry(HashEntry entry)(Code)(Java Doc) protected void doReadObject(ObjectInputStream in) throws IOException, ClassNotFoundException(Code)(Java Doc) protected void doWriteObject(ObjectOutputStream out) throws IOException(Code)(Java Doc) protected void ensureCapacity(int newCapacity)(Code)(Java Doc) protected int entryHashCode(HashEntry entry)(Code)(Java Doc) protected Object entryKey(HashEntry entry)(Code)(Java Doc) protected HashEntry entryNext(HashEntry entry)(Code)(Java Doc) public Set entrySet()(Code)(Java Doc) protected Object entryValue(HashEntry entry)(Code)(Java Doc) public boolean equals(Object obj)(Code)(Java Doc) public Object get(Object key)(Code)(Java Doc) protected HashEntry getEntry(Object key)(Code)(Java Doc) protected int hash(Object key)(Code)(Java Doc) public int hashCode()(Code)(Java Doc) protected int hashIndex(int hashCode, int dataSize)(Code)(Java Doc) protected void init()(Code)(Java Doc) public boolean isEmpty()(Code)(Java Doc) protected boolean isEqualKey(Object key1, Object key2)(Code)(Java Doc) protected boolean isEqualValue(Object value1, Object value2)(Code)(Java Doc) public Set keySet()(Code)(Java Doc) public MapIterator mapIterator()(Code)(Java Doc) public Object put(Object key, Object value)(Code)(Java Doc) public void putAll(Map map)(Code)(Java Doc) public Object remove(Object key)(Code)(Java Doc) protected void removeEntry(HashEntry entry, int hashIndex, HashEntry previous)(Code)(Java Doc) protected void removeMapping(HashEntry entry, int hashIndex, HashEntry previous)(Code)(Java Doc) protected void reuseEntry(HashEntry entry, int hashIndex, int hashCode, Object key, Object value)(Code)(Java Doc) public int size()(Code)(Java Doc) public String toString()(Code)(Java Doc) protected void updateEntry(HashEntry entry, Object newValue)(Code)(Java Doc) public Collection values()(Code)(Java Doc)
|
|
|