Class ForgetfulMap<K,V>
- All Implemented Interfaces:
Map<K,V>
Map that can forget entries after a specified period of time – a cache in other words. The
entries can either expire after a certain amount of time has passed since they were created/written or
since they were last accessed.
In addition to implementing the Map interface, also looked at the Cache interface of the Caffeine
library, and mimicked some of its methods.
Furthermore, this class provides a re-implementation of TypeCache.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final classprivate static final classHelper class to store value and timestampsstatic interfaceThe specifications ofTypeCacheto allow for another implementation.private static final classA re-implementation ofTypeCachebacked by aForgetfulMap.Nested classes/interfaces inherited from class AbstractMap
AbstractMap.SimpleEntry<K,V>, AbstractMap.SimpleImmutableEntry<K, V> -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final ScheduledExecutorServiceprivate final longprivate final Map<K, ForgetfulMap.CachedValue<V>> private final long -
Constructor Summary
ConstructorsConstructorDescriptionForgetfulMap(ForgetfulMap.Builder builder) ForgetfulMap(ForgetfulMap.Builder builder, Consumer<V> disposer) -
Method Summary
Modifier and TypeMethodDescriptionvoidcleanUp()Removes all entries that have expired.voidclear()booleancontainsKey(Object key) booleancontainsValue(Object value) entrySet()booleanlongReturns the approximate number of entries in this cache.Returns the value associated with thekeyin this cache, obtaining that value from themappingFunctionif necessary.getAllPresent(Iterable<? extends K> keys) Returns a map of the values associated with thekeysin this cache.getIfPresent(K key) Returns the value associated with thekeyin this cache, ornullif there is no cached value for thekey.inthashCode()voidinvalidate(K key) Discards any cached value for thekey.voidDiscards all entries in the cache.voidinvalidateAll(Iterable<? extends K> keys) Discards any cached values for thekeys.booleanisEmpty()private booleanisExpired(long now, ForgetfulMap.CachedValue<V> cached) keySet()static ForgetfulMap.BuildernewValueCache(K key, Function<? super K, ? extends V> valueSupplier) voidCopies all of the mappings from the specified map to the cache.booleanintsize()unwrap(Map.Entry<K, ForgetfulMap.CachedValue<V>> entry) Methods inherited from class AbstractMap
clone, toString, valuesMethods inherited from interface Map
compute, computeIfAbsent, computeIfPresent, forEach, getOrDefault, merge, putIfAbsent, replace, replace, replaceAll
-
Field Details
-
CLEANER
-
myAccessLimit
private final long myAccessLimit -
myDisposer
-
myStorage
-
myWriteLimit
private final long myWriteLimit
-
-
Constructor Details
-
ForgetfulMap
ForgetfulMap(ForgetfulMap.Builder builder) -
ForgetfulMap
ForgetfulMap(ForgetfulMap.Builder builder, Consumer<V> disposer)
-
-
Method Details
-
newBuilder
-
cleanUp
public void cleanUp()Removes all entries that have expired. This method is automatically called at regular intervals, but can also be called manually to remove entries that have expired since the last cleanup. -
clear
-
containsKey
- Specified by:
containsKeyin interfaceMap<K,V> - Overrides:
containsKeyin classAbstractMap<K,V>
-
containsValue
- Specified by:
containsValuein interfaceMap<K,V> - Overrides:
containsValuein classAbstractMap<K,V>
-
entrySet
-
equals
-
estimatedSize
public long estimatedSize()Returns the approximate number of entries in this cache. The value returned is an estimate; the actual count may differ if there are concurrent insertions or removals, or if some entries are pending removal due to expiration or weak/soft reference collection. In the case of stale entries this inaccuracy can be mitigated by performing acleanUp()first. -
get
Returns the value associated with thekeyin this cache, obtaining that value from themappingFunctionif necessary. This method provides a simple substitute for the conventional "if cached, return; otherwise create, cache and return" pattern.If the specified key is not already associated with a value, attempts to compute its value using the given mapping function and enters it into this cache unless
null. The entire method invocation is performed atomically, so the function is applied at most once per key. Some attempted update operations on this cache by other threads may be blocked while the computation is in progress, so the computation should be short and simple, and must not attempt to update any other mappings of this cache. -
get
-
getAllPresent
Returns a map of the values associated with thekeysin this cache. The returned map will only contain entries which are already present in the cache.Note that duplicate elements in
keys, as determined byObject.equals(Object), will be ignored. -
getIfPresent
-
hashCode
-
invalidate
Discards any cached value for thekey. The behavior of this operation is undefined for an entry that is being loaded (or reloaded) and is otherwise not present. -
invalidateAll
public void invalidateAll()Discards all entries in the cache. The behavior of this operation is undefined for an entry that is being loaded (or reloaded) and is otherwise not present. -
invalidateAll
-
isEmpty
-
keySet
-
newValueCache
-
put
-
putAll
Copies all of the mappings from the specified map to the cache. The effect of this call is equivalent to that of callingput(k, v)on this map once for each mapping from keykto valuevin the specified map. The behavior of this operation is undefined if the specified map is modified while the operation is in progress. -
remove
-
remove
-
size
-
isExpired
-
unwrap
-