public final class WeakIdentityMap<K,V> extends Object
WeakHashMap and
 IdentityHashMap.
 Useful for caches that need to key off of a == comparison
 instead of a .equals.
 
 This class is not a general-purpose Map
 implementation! It intentionally violates
 Map's general contract, which mandates the use of the equals method
 when comparing objects. This class is designed for use only in the
 rare cases wherein reference-equality semantics are required.
 
 
This implementation was forked from Apache CXF
 but modified to not implement the Map interface and
 without any set views on it, as those are error-prone and inefficient,
 if not implemented carefully. The map only contains Iterator implementations
 on the values and not-GCed keys. Lucene's implementation also supports null
 keys, but those are never weak!
 
 
The map supports two modes of operation:
reapOnRead = true: This behaves identical to a WeakHashMap
  where it also cleans up the reference queue on every read operation (get(Object),
  containsKey(Object), size(), valueIterator()), freeing map entries
  of already GCed keys.reapOnRead = false: This mode does not call reap() on every read
  operation. In this case, the reference queue is only cleaned up on write operations
  (like put(Object, Object)). This is ideal for maps with few entries where
  the keys are unlikely be garbage collected, but there are lots of get(Object)
  operations. The code can still call reap() to manually clean up the queue without
  doing a write operation.| Modifier and Type | Method and Description | 
|---|---|
void | 
clear()
Removes all of the mappings from this map. 
 | 
boolean | 
containsKey(Object key)
Returns  
true if this map contains a mapping for the specified key. | 
V | 
get(Object key)
Returns the value to which the specified key is mapped. 
 | 
boolean | 
isEmpty()
Returns  
true if this map contains no key-value mappings. | 
Iterator<K> | 
keyIterator()
Returns an iterator over all weak keys of this map. 
 | 
static <K,V> WeakIdentityMap<K,V> | 
newConcurrentHashMap()
Creates a new  
WeakIdentityMap based on a ConcurrentHashMap. | 
static <K,V> WeakIdentityMap<K,V> | 
newConcurrentHashMap(boolean reapOnRead)
Creates a new  
WeakIdentityMap based on a ConcurrentHashMap. | 
static <K,V> WeakIdentityMap<K,V> | 
newHashMap()
Creates a new  
WeakIdentityMap based on a non-synchronized HashMap. | 
static <K,V> WeakIdentityMap<K,V> | 
newHashMap(boolean reapOnRead)
Creates a new  
WeakIdentityMap based on a non-synchronized HashMap. | 
V | 
put(K key,
   V value)
Associates the specified value with the specified key in this map. 
 | 
void | 
reap()
This method manually cleans up the reference queue to remove all garbage
 collected key/value pairs from the map. 
 | 
V | 
remove(Object key)
Removes the mapping for a key from this weak hash map if it is present. 
 | 
int | 
size()
Returns the number of key-value mappings in this map. 
 | 
Iterator<V> | 
valueIterator()
Returns an iterator over all values of this map. 
 | 
public static <K,V> WeakIdentityMap<K,V> newHashMap()
WeakIdentityMap based on a non-synchronized HashMap.
 The map cleans up the reference queue on every read operation.public static <K,V> WeakIdentityMap<K,V> newHashMap(boolean reapOnRead)
WeakIdentityMap based on a non-synchronized HashMap.reapOnRead - controls if the map cleans up the reference queue on every read operation.public static <K,V> WeakIdentityMap<K,V> newConcurrentHashMap()
WeakIdentityMap based on a ConcurrentHashMap.
 The map cleans up the reference queue on every read operation.public static <K,V> WeakIdentityMap<K,V> newConcurrentHashMap(boolean reapOnRead)
WeakIdentityMap based on a ConcurrentHashMap.reapOnRead - controls if the map cleans up the reference queue on every read operation.public void clear()
public boolean containsKey(Object key)
true if this map contains a mapping for the specified key.public V put(K key, V value)
public boolean isEmpty()
true if this map contains no key-value mappings.public V remove(Object key)
null if the map contained no mapping for the key.
 A return value of null does not necessarily indicate that
 the map contained.public int size()
public Iterator<K> keyIterator()
public Iterator<V> valueIterator()
reapOnRead is false.public void reap()
reapOnRead = true. Otherwise it might be a good idea
 to call this method when there is spare time (e.g. from a background thread).reapOnRead settingCopyright © 2000-2018 Apache Software Foundation. All Rights Reserved.