ccs.utils
Class ForgetfulMap<K,V>

java.lang.Object
  extended by ccs.utils.ForgetfulMap<K,V>
All Implemented Interfaces:
java.util.Map<K,V>

public class ForgetfulMap<K,V>
extends java.lang.Object
implements java.util.Map<K,V>

A forgetful hashmap behaves like an ordinary hashmap, with one exception: mappings which are not used for a period of time disappear. This collection is useful for things like sessions, which should expire after a period of inactivity. The expiry is done lazily; to ensure that mappings are forgotten promptly, call the forget method explicitly. MT-UNSAFE - synchronize externally. Note that operations which are safe to leave unsycnhronized for a normal hash map may not be safe for a forgetful hashmap, due to the side-effects created by the forgetting process. Synchronize explicitly if in doubt. Only explicit get or put operations refresh the mappings - accessing the key via alternative views or iterators does not.


Nested Class Summary
 
Nested classes/interfaces inherited from interface java.util.Map
java.util.Map.Entry<K,V>
 
Constructor Summary
ForgetfulMap()
          Construct a forgetful hashmap which forgets after 30 minutes.
ForgetfulMap(long memorySeconds)
          Construct a forgetful hashmap which forgets mappings after the specified period.
 
Method Summary
 void clear()
           
 boolean containsKey(java.lang.Object key)
           
 boolean containsValue(java.lang.Object value)
           
 java.util.Set<java.util.Map.Entry<K,V>> entrySet()
          Not supported.
 void forget()
          Forget any mappings which haven't been used in a while.
 V get(java.lang.Object key)
           
 boolean isEmpty()
           
 java.util.Set<K> keySet()
           
 V put(K key, V value)
           
 void putAll(java.util.Map<? extends K,? extends V> src)
           
 V remove(java.lang.Object key)
           
 int size()
           
 java.util.Collection<V> values()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface java.util.Map
equals, hashCode
 

Constructor Detail

ForgetfulMap

public ForgetfulMap()
Construct a forgetful hashmap which forgets after 30 minutes.


ForgetfulMap

public ForgetfulMap(long memorySeconds)
Construct a forgetful hashmap which forgets mappings after the specified period.

Parameters:
memorySeconds - how long to remember unaccessed mappings for.
Method Detail

size

public int size()
Specified by:
size in interface java.util.Map<K,V>

isEmpty

public boolean isEmpty()
Specified by:
isEmpty in interface java.util.Map<K,V>

containsKey

public boolean containsKey(java.lang.Object key)
Specified by:
containsKey in interface java.util.Map<K,V>

containsValue

public boolean containsValue(java.lang.Object value)
Specified by:
containsValue in interface java.util.Map<K,V>

get

public V get(java.lang.Object key)
Specified by:
get in interface java.util.Map<K,V>

put

public V put(K key,
             V value)
Specified by:
put in interface java.util.Map<K,V>

remove

public V remove(java.lang.Object key)
Specified by:
remove in interface java.util.Map<K,V>

putAll

public void putAll(java.util.Map<? extends K,? extends V> src)
Specified by:
putAll in interface java.util.Map<K,V>

clear

public void clear()
Specified by:
clear in interface java.util.Map<K,V>

keySet

public java.util.Set<K> keySet()
Specified by:
keySet in interface java.util.Map<K,V>

values

public java.util.Collection<V> values()
Specified by:
values in interface java.util.Map<K,V>

entrySet

public java.util.Set<java.util.Map.Entry<K,V>> entrySet()
Not supported.

Specified by:
entrySet in interface java.util.Map<K,V>

forget

public void forget()
Forget any mappings which haven't been used in a while.