Package com.twelvemonkeys.util
Class TimeoutMap<K,V>
- java.lang.Object
-
- java.util.AbstractMap<K,V>
-
- com.twelvemonkeys.util.AbstractDecoratedMap<K,V>
-
- com.twelvemonkeys.util.TimeoutMap<K,V>
-
- All Implemented Interfaces:
ExpiringMap<K,V>,java.io.Serializable,java.lang.Cloneable,java.util.Map<K,V>
public class TimeoutMap<K,V> extends AbstractDecoratedMap<K,V> implements ExpiringMap<K,V>, java.io.Serializable, java.lang.Cloneable
AMapimplementation that removes (expires) its elements after a given period. The map is by default backed by aHashMap, or can be instantiated with any givenMapas backing.Notes to consider when using this map:
- Elements may not expire on the exact millisecond as expected.
- The value returned by the
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. - Elements in this map may expire at any time
(but never between invocations of
Iterator.hasNext()andIterator.next()orIterator.remove(), when iterating the collection views).
- Version:
- $Id: //depot/branches/personal/haraldk/twelvemonkeys/release-2/twelvemonkeys-core/src/main/java/com/twelvemonkeys/util/TimeoutMap.java#2 $
- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private classTimeoutMap.EntryIteratorprivate classTimeoutMap.KeyIteratorprivate classTimeoutMap.TimedEntryKeeps track of timed objectsprivate classTimeoutMap.TimeoutMapIterator<E>Note: Iterating through this iterator will remove any expired values.private classTimeoutMap.ValueIterator-
Nested classes/interfaces inherited from class com.twelvemonkeys.util.AbstractDecoratedMap
AbstractDecoratedMap.BasicEntry<K,V>, AbstractDecoratedMap.EntrySet, AbstractDecoratedMap.KeySet, AbstractDecoratedMap.Values
-
-
Field Summary
Fields Modifier and Type Field Description protected longexpiryTimeExpiry timeprivate longnextExpiryTime-
Fields inherited from class com.twelvemonkeys.util.AbstractDecoratedMap
entries, modCount
-
-
Constructor Summary
Constructors Constructor Description TimeoutMap()Creates aTimeoutMapwith the default expiry time of 1 minute.TimeoutMap(long pExpiryTime)Creates aTimeoutMapwith the given expiry time (milliseconds).TimeoutMap(java.util.Map<? extends K,? extends V> pContents)Creates aTimeoutMapcontaining the same elements as the given map with the default expiry time of 1 minute.TimeoutMap(java.util.Map<K,java.util.Map.Entry<K,V>> pBacking, java.util.Map<? extends K,? extends V> pContents, long pExpiryTime)Creates aTimeoutMapwith the given expiry time (milliseconds).
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclear()Removes all mappings from this map.booleancontainsKey(java.lang.Object pKey)Returnstrueif this map contains a mapping for the specified pKey.(package private) TimeoutMap.TimedEntrycreateEntry(K pKey, V pValue)java.util.Set<java.util.Map.Entry<K,V>>entrySet()Vget(java.lang.Object pKey)Returns the value to which this map maps the specified pKey.longgetExpiryTime()Gets the maximum time any value will be kept in the map, before it expires.booleanisEmpty()Returnstrueif this map contains no key-value mappings.java.util.Set<K>keySet()protected java.util.Iterator<java.util.Map.Entry<K,V>>newEntryIterator()protected java.util.Iterator<K>newKeyIterator()protected java.util.Iterator<V>newValueIterator()voidprocessRemoved(java.util.Map.Entry pRemoved)May be used by clients as a call-back to notify when mappings expire from the map.Vput(K pKey, V pValue)Associates the specified pValue with the specified pKey in this map (optional operation).Vremove(java.lang.Object pKey)Removes the mapping for this pKey from this map if present (optional operation).protected voidremoveExpiredEntries()Removes any expired mappings.private voidremoveExpiredEntriesSynced(long pTime)Okay, I guess this do resemble DCL...voidsetExpiryTime(long pExpiryTime)Sets the maximum time any value will be kept in the map, before it expires.intsize()Returns the number of key-value mappings in this map.java.util.Collection<V>values()-
Methods inherited from class com.twelvemonkeys.util.AbstractDecoratedMap
clone, containsValue, getEntry, init, removeEntry
-
-
-
-
Constructor Detail
-
TimeoutMap
public TimeoutMap()
Creates aTimeoutMapwith the default expiry time of 1 minute. ThisTimeoutMapwill be backed by a newHashMapinstance.This is constructor is here to comply with the recommendations for "standard" constructors in the
Mapinterface.- See Also:
TimeoutMap(long)
-
TimeoutMap
public TimeoutMap(java.util.Map<? extends K,? extends V> pContents)
Creates aTimeoutMapcontaining the same elements as the given map with the default expiry time of 1 minute. ThisTimeoutMapwill be backed by a newHashMapinstance, and not the map passed in as a paramter.This is constructor is here to comply with the recommendations for "standard" constructors in the
Mapinterface.- Parameters:
pContents- the map whose mappings are to be placed in this map. May benull.- See Also:
TimeoutMap(java.util.Map, Map, long),Map
-
TimeoutMap
public TimeoutMap(long pExpiryTime)
Creates aTimeoutMapwith the given expiry time (milliseconds). ThisTimeoutMapwill be backed by a newHashMapinstance.- Parameters:
pExpiryTime- the expiry time (time to live) for elements in this map
-
TimeoutMap
public TimeoutMap(java.util.Map<K,java.util.Map.Entry<K,V>> pBacking, java.util.Map<? extends K,? extends V> pContents, long pExpiryTime)
Creates aTimeoutMapwith the given expiry time (milliseconds). ThisTimeoutMapwill be backed by the givenMap.Note that structurally modifying the backing map directly (not through this map or its collection views), is not allowed, and will produce undeterministic exceptions.
- Parameters:
pBacking- the map that will be used as backing.pContents- the map whose mappings are to be placed in this map. May benull.pExpiryTime- the expiry time (time to live) for elements in this map
-
-
Method Detail
-
getExpiryTime
public long getExpiryTime()
Gets the maximum time any value will be kept in the map, before it expires.- Returns:
- the expiry time
-
setExpiryTime
public void setExpiryTime(long pExpiryTime)
Sets the maximum time any value will be kept in the map, before it expires. Removes any items that are older than the specified time.- Parameters:
pExpiryTime- the expiry time (time to live) for elements in this map
-
size
public int size()
Returns the number of key-value mappings in this map. If the map contains more thanInteger.MAX_VALUEelements, returnsInteger.MAX_VALUE.
-
isEmpty
public boolean isEmpty()
Returnstrueif this map contains no key-value mappings.
-
containsKey
public boolean containsKey(java.lang.Object pKey)
Returnstrueif this map contains a mapping for the specified pKey.- Specified by:
containsKeyin interfacejava.util.Map<K,V>- Overrides:
containsKeyin classAbstractDecoratedMap<K,V>- Parameters:
pKey- pKey whose presence in this map is to be tested.- Returns:
trueif this map contains a mapping for the specified pKey.
-
get
public V get(java.lang.Object pKey)
Returns the value to which this map maps the specified pKey. Returnsnullif the map contains no mapping for this pKey. A return value ofnulldoes not necessarily indicate that the map contains no mapping for the pKey; it's also possible that the map explicitly maps the pKey tonull. ThecontainsKeyoperation may be used to distinguish these two cases.- Specified by:
getin interfacejava.util.Map<K,V>- Specified by:
getin classAbstractDecoratedMap<K,V>- Parameters:
pKey- pKey whose associated value is to be returned.- Returns:
- the value to which this map maps the specified pKey, or
nullif the map contains no mapping for this pKey. - See Also:
containsKey(java.lang.Object)
-
put
public V put(K pKey, V pValue)
Associates the specified pValue with the specified pKey in this map (optional operation). If the map previously contained a mapping for this pKey, the old pValue is replaced.- Specified by:
putin interfacejava.util.Map<K,V>- Specified by:
putin classAbstractDecoratedMap<K,V>- Parameters:
pKey- pKey with which the specified pValue is to be associated.pValue- pValue to be associated with the specified pKey.- Returns:
- previous pValue associated with specified pKey, or
nullif there was no mapping for pKey. Anullreturn can also indicate that the map previously associatednullwith the specified pKey, if the implementation supportsnullvalues.
-
remove
public V remove(java.lang.Object pKey)
Removes the mapping for this pKey from this map if present (optional operation).- Specified by:
removein interfacejava.util.Map<K,V>- Specified by:
removein classAbstractDecoratedMap<K,V>- Parameters:
pKey- pKey whose mapping is to be removed from the map.- Returns:
- previous value associated with specified pKey, or
nullif there was no mapping for pKey. Anullreturn can also indicate that the map previously associatednullwith the specified pKey, if the implementation supportsnullvalues.
-
clear
public void clear()
Removes all mappings from this map.
-
createEntry
TimeoutMap.TimedEntry createEntry(K pKey, V pValue)
- Overrides:
createEntryin classAbstractDecoratedMap<K,V>
-
removeExpiredEntries
protected void removeExpiredEntries()
Removes any expired mappings.
-
removeExpiredEntriesSynced
private void removeExpiredEntriesSynced(long pTime)
Okay, I guess this do resemble DCL...- Parameters:
pTime- now
-
values
public java.util.Collection<V> values()
-
keySet
public java.util.Set<K> keySet()
-
newKeyIterator
protected java.util.Iterator<K> newKeyIterator()
- Specified by:
newKeyIteratorin classAbstractDecoratedMap<K,V>
-
newValueIterator
protected java.util.Iterator<V> newValueIterator()
- Specified by:
newValueIteratorin classAbstractDecoratedMap<K,V>
-
newEntryIterator
protected java.util.Iterator<java.util.Map.Entry<K,V>> newEntryIterator()
- Specified by:
newEntryIteratorin classAbstractDecoratedMap<K,V>
-
processRemoved
public void processRemoved(java.util.Map.Entry pRemoved)
Description copied from interface:ExpiringMapMay be used by clients as a call-back to notify when mappings expire from the map.- Specified by:
processRemovedin interfaceExpiringMap<K,V>- Parameters:
pRemoved- the removed mapping
-
-