public class LRUMap<K,V> extends AbstractLinkedMap<K,V> implements BoundedMap<K,V>, java.io.Serializable, java.lang.Cloneable
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.
A somewhat subtle ramification of the least recently used
algorithm is that calls to get(Object)
stand a very good chance
of modifying the map's iteration order and thus invalidating any
iterators currently in use. It is therefore suggested that iterations
over an LRUMap
instance access entry values only through a
MapIterator
or AbstractHashedMap.entrySet()
iterator.
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 Collections.synchronizedMap(Map)
. This class may throw
NullPointerException
's when accessed by concurrent threads.
Constructor and Description |
---|
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 max capacity and
load factor.
|
LRUMap(int maxSize,
float loadFactor,
boolean scanUntilRemovable)
Constructs a new, empty map with the specified max capacity and load factor.
|
LRUMap(int maxSize,
int initialSize)
Constructs a new, empty map with the specified maximum size.
|
LRUMap(int maxSize,
int initialSize,
float loadFactor)
Constructs a new, empty map with the specified max / initial capacity and
load factor.
|
LRUMap(int maxSize,
int initialSize,
float loadFactor,
boolean scanUntilRemovable)
Constructs a new, empty map with the specified max / initial capacity and load factor.
|
LRUMap(java.util.Map<? extends K,? extends V> map)
Constructor copying elements from another map.
|
LRUMap(java.util.Map<? extends K,? extends V> map,
boolean scanUntilRemovable)
Constructor copying elements from another map.
|
Modifier and Type | Method and Description |
---|---|
LRUMap<K,V> |
clone()
Clones the map without cloning the keys or values.
|
V |
get(java.lang.Object key)
Gets the value mapped to the key specified.
|
V |
get(java.lang.Object key,
boolean updateToMRU)
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).
|
clear, containsValue, firstKey, lastKey, mapIterator, nextKey, previousKey
containsKey, entrySet, equals, hashCode, isEmpty, keySet, put, putAll, remove, size, toString, values
clear, compute, computeIfAbsent, computeIfPresent, containsKey, containsValue, entrySet, equals, forEach, getOrDefault, hashCode, isEmpty, keySet, merge, put, putAll, putIfAbsent, remove, remove, replace, replace, replaceAll, size, values
mapIterator
containsKey, containsValue, entrySet, isEmpty, keySet, remove, size, values
public LRUMap()
public LRUMap(int maxSize)
maxSize
- the maximum size of the mapjava.lang.IllegalArgumentException
- if the maximum size is less than onepublic LRUMap(int maxSize, int initialSize)
maxSize
- the maximum size of the mapinitialSize
- the initial size of the mapjava.lang.IllegalArgumentException
- if the maximum size is less than onejava.lang.IllegalArgumentException
- if the initial size is negative or larger than the maximum sizepublic LRUMap(int maxSize, boolean scanUntilRemovable)
maxSize
- the maximum size of the mapscanUntilRemovable
- scan until a removeable entry is found, default falsejava.lang.IllegalArgumentException
- if the maximum size is less than onepublic LRUMap(int maxSize, float loadFactor)
maxSize
- the maximum size of the maploadFactor
- the load factorjava.lang.IllegalArgumentException
- if the maximum size is less than onejava.lang.IllegalArgumentException
- if the load factor is less than zeropublic LRUMap(int maxSize, int initialSize, float loadFactor)
maxSize
- the maximum size of the mapinitialSize
- the initial size of the maploadFactor
- the load factorjava.lang.IllegalArgumentException
- if the maximum size is less than onejava.lang.IllegalArgumentException
- if the initial size is negative or larger than the maximum sizejava.lang.IllegalArgumentException
- if the load factor is less than zeropublic LRUMap(int maxSize, float loadFactor, boolean scanUntilRemovable)
maxSize
- the maximum size of the maploadFactor
- the load factorscanUntilRemovable
- scan until a removeable entry is found, default falsejava.lang.IllegalArgumentException
- if the maximum size is less than onejava.lang.IllegalArgumentException
- if the load factor is less than zeropublic LRUMap(int maxSize, int initialSize, float loadFactor, boolean scanUntilRemovable)
maxSize
- the maximum size of the mapinitialSize
- the initial size of the maploadFactor
- the load factorscanUntilRemovable
- scan until a removeable entry is found, default falsejava.lang.IllegalArgumentException
- if the maximum size is less than onejava.lang.IllegalArgumentException
- if the initial size is negative or larger than the maximum sizejava.lang.IllegalArgumentException
- if the load factor is less than zeropublic LRUMap(java.util.Map<? extends K,? extends V> map)
The maximum size is set from the map's size.
map
- the map to copyjava.lang.NullPointerException
- if the map is nulljava.lang.IllegalArgumentException
- if the map is emptypublic LRUMap(java.util.Map<? extends K,? extends V> map, boolean scanUntilRemovable)
map
- the map to copyscanUntilRemovable
- scan until a removeable entry is found, default falsejava.lang.NullPointerException
- if the map is nulljava.lang.IllegalArgumentException
- if the map is emptypublic V get(java.lang.Object key)
This operation changes the position of the key in the map to the most recently used position (last).
public V get(java.lang.Object key, boolean updateToMRU)
If updateToMRU
is true
, the position of the key in the map
is changed to the most recently used position (last), otherwise the iteration
order is not changed by this operation.
key
- the keyupdateToMRU
- whether the key shall be updated to the
most recently used positionpublic 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()
"Copyright © 2010 - 2020 Adobe Systems Incorporated. All Rights Reserved"