ExpiringMap<K,V>
, Serializable
, Cloneable
, Map<K,V>
public class TimeoutMap<K,V> extends AbstractMap<K,V> implements ExpiringMap<K,V>, Serializable, Cloneable
Map
implementation that removes (exipres) its elements after
a given period. The map is by default backed by a HashMap
,
or can be instantiated with any given Map
as backing.
Notes to consider when using this map:
size()
method of the map, or any of
its collection views, may not represent
the exact number of entries in the map at any given time.Iterator.hasNext()
and Iterator.next()
or Iterator.remove()
,
when iterating the collection views).AbstractMap.SimpleEntry<K extends Object,V extends Object>, AbstractMap.SimpleImmutableEntry<K extends Object,V extends Object>
Modifier and Type | Field | Description |
---|---|---|
protected Map<K,Map.Entry<K,V>> |
entries |
|
protected long |
expiryTime |
Expiry time
|
protected int |
modCount |
Constructor | Description |
---|---|
TimeoutMap() |
Creates a
TimeoutMap with the default expiry time of 1 minute. |
TimeoutMap(long pExpiryTime) |
Creates a
TimeoutMap with the given expiry time (milliseconds). |
TimeoutMap(Map<? extends K,? extends V> pContents) |
Creates a
TimeoutMap containing the same elements as the given map
with the default expiry time of 1 minute. |
TimeoutMap(Map<K,Map.Entry<K,V>> pBacking,
Map<? extends K,? extends V> pContents,
long pExpiryTime) |
Creates a
TimeoutMap with the given expiry time (milliseconds). |
Modifier and Type | Method | Description |
---|---|---|
void |
clear() |
Removes all mappings from this map.
|
protected Object |
clone() |
Returns a shallow copy of this
AbstractMap instance: the keys
and values themselves are not cloned. |
boolean |
containsKey(Object pKey) |
Returns
true if this map contains a mapping for the specified
pKey. |
boolean |
containsValue(Object pValue) |
Returns
true if this map maps one or more keys to the
specified pValue. |
Set<Map.Entry<K,V>> |
entrySet() |
|
V |
get(Object pKey) |
Returns the value to which this map maps the specified pKey.
|
long |
getExpiryTime() |
Gets the maximum time any value will be kept in the map, before it expires.
|
protected void |
init() |
Default implementation, does nothing.
|
boolean |
isEmpty() |
Returns
true if this map contains no key-value mappings. |
Set<K> |
keySet() |
|
protected Iterator<Map.Entry<K,V>> |
newEntryIterator() |
|
protected Iterator<K> |
newKeyIterator() |
|
protected Iterator<V> |
newValueIterator() |
|
void |
processRemoved(Map.Entry pRemoved) |
May be used by clients as a call-back to notify when mappings expire from
the map.
|
V |
put(K pKey,
V pValue) |
Associates the specified pValue with the specified pKey in this map
(optional operation).
|
V |
remove(Object pKey) |
Removes the mapping for this pKey from this map if present (optional
operation).
|
protected Map.Entry<K,V> |
removeEntry(Map.Entry<K,V> pEntry) |
Removes the given entry from the Map.
|
protected void |
removeExpiredEntries() |
Removes any expired mappings.
|
void |
setExpiryTime(long pExpiryTime) |
Sets the maximum time any value will be kept in the map, before it expires.
|
int |
size() |
Returns the number of key-value mappings in this map.
|
Collection<V> |
values() |
equals, hashCode, putAll, toString
compute, computeIfAbsent, computeIfPresent, containsValue, equals, forEach, getOrDefault, hashCode, merge, putAll, putIfAbsent, remove, replace, replace, replaceAll
protected long expiryTime
protected transient volatile int modCount
public TimeoutMap()
TimeoutMap
with the default expiry time of 1 minute.
This TimeoutMap
will be backed by a new HashMap
instance.
This is constructor is here to comply with the reccomendations for
"standard" constructors in the Map
interface.TimeoutMap(long)
public TimeoutMap(Map<? extends K,? extends V> pContents)
TimeoutMap
containing the same elements as the given map
with the default expiry time of 1 minute.
This TimeoutMap
will be backed by a new HashMap
instance,
and not the map passed in as a paramter.
This is constructor is here to comply with the reccomendations for
"standard" constructors in the Map
interface.pContents
- the map whose mappings are to be placed in this map.
May be null
.TimeoutMap(java.util.Map, Map, long)
,
Map
public TimeoutMap(long pExpiryTime)
TimeoutMap
with the given expiry time (milliseconds).
This TimeoutMap
will be backed by a new HashMap
instance.pExpiryTime
- the expiry time (time to live) for elements in this mappublic TimeoutMap(Map<K,Map.Entry<K,V>> pBacking, Map<? extends K,? extends V> pContents, long pExpiryTime)
TimeoutMap
with the given expiry time (milliseconds).
This TimeoutMap
will be backed by the given Map
.
Note that structurally modifying the backing map directly (not
through this map or its collection views), is not allowed, and will
produce undeterministic exceptions.pBacking
- the map that will be used as backing.pContents
- the map whose mappings are to be placed in this map.
May be null
.pExpiryTime
- the expiry time (time to live) for elements in this mappublic long getExpiryTime()
public void setExpiryTime(long pExpiryTime)
pExpiryTime
- the expiry time (time to live) for elements in this mappublic int size()
Integer.MAX_VALUE
elements, returns
Integer.MAX_VALUE
.public boolean isEmpty()
true
if this map contains no key-value mappings.public boolean containsKey(Object pKey)
true
if this map contains a mapping for the specified
pKey.containsKey
in interface Map<K,V>
pKey
- pKey whose presence in this map is to be tested.true
if this map contains a mapping for the specified
pKey.public V get(Object pKey)
null
if the map contains no mapping for this pKey. A return
value of null
does not necessarily indicate that the
map contains no mapping for the pKey; it's also possible that the map
explicitly maps the pKey to null
. The containsKey
operation may be used to distinguish these two cases.get
in interface Map<K,V>
pKey
- pKey whose associated value is to be returned.null
if the map contains no mapping for this pKey.containsKey(java.lang.Object)
public V put(K pKey, V pValue)
put
in interface Map<K,V>
pKey
- pKey with which the specified pValue is to be associated.pValue
- pValue to be associated with the specified pKey.null
if there was no mapping for pKey. A null
return can
also indicate that the map previously associated null
with the specified pKey, if the implementation supports
null
values.public V remove(Object pKey)
remove
in interface Map<K,V>
pKey
- pKey whose mapping is to be removed from the map.null
if there was no mapping for pKey. A null
return can
also indicate that the map previously associated null
with the specified pKey, if the implementation supports
null
values.public void clear()
protected void removeExpiredEntries()
public void processRemoved(Map.Entry pRemoved)
ExpiringMap
processRemoved
in interface ExpiringMap<K,V>
pRemoved
- the removed mappingprotected void init()
public boolean containsValue(Object pValue)
true
if this map maps one or more keys to the
specified pValue. More formally, returns true
if and only if
this map contains at least one mapping to a pValue v
such that
(pValue==null ? v==null : pValue.equals(v))
.
This implementation requires time linear in the map size for this
operation.containsValue
in interface Map<K,V>
containsValue
in class AbstractMap<K,V>
pValue
- pValue whose presence in this map is to be tested.true
if this map maps one or more keys to the
specified pValue.protected Object clone() throws CloneNotSupportedException
AbstractMap
instance: the keys
and values themselves are not cloned.clone
in class AbstractMap<K,V>
CloneNotSupportedException
Copyright © 2018. All rights reserved.