K - the key typeV - the value typepublic class ConcurrentReferenceHashMap<K,V>
extends java.util.AbstractMap<K,V>
implements java.util.concurrent.ConcurrentMap<K,V>
ConcurrentHashMap that uses soft or
 weak references for both keys and values.
 This class can be used as an alternative to
 Collections.synchronizedMap(new WeakHashMap<K, Reference<V>>()) in order to
 support better performance when accessed concurrently. This implementation follows the
 same design constraints as ConcurrentHashMap with the exception that
 null values and null keys are supported.
 
NOTE: The use of references means that there is no guarantee that items placed into the map will be subsequently available. The garbage collector may discard references at any time, so it may appear that an unknown thread is silently removing entries.
If not explicitly specified, this implementation will use soft entry references.
| Modifier and Type | Class and Description | 
|---|---|
| protected static class  | ConcurrentReferenceHashMap.Entry<K,V>A single map entry. | 
| protected static interface  | ConcurrentReferenceHashMap.Reference<K,V>A reference to an  ConcurrentReferenceHashMap.Entrycontained in the map. | 
| protected class  | ConcurrentReferenceHashMap.ReferenceManagerStrategy class used to manage  ConcurrentReferenceHashMap.References. | 
| static class  | ConcurrentReferenceHashMap.ReferenceTypeVarious reference types supported by this map. | 
| protected static class  | ConcurrentReferenceHashMap.RestructureThe types of restructuring that can be performed. | 
| protected class  | ConcurrentReferenceHashMap.SegmentA single segment used to divide the map to allow better concurrent performance. | 
| Constructor and Description | 
|---|
| ConcurrentReferenceHashMap()Create a new  ConcurrentReferenceHashMapinstance. | 
| ConcurrentReferenceHashMap(int initialCapacity)Create a new  ConcurrentReferenceHashMapinstance. | 
| ConcurrentReferenceHashMap(int initialCapacity,
                          ConcurrentReferenceHashMap.ReferenceType referenceType)Create a new  ConcurrentReferenceHashMapinstance. | 
| ConcurrentReferenceHashMap(int initialCapacity,
                          float loadFactor)Create a new  ConcurrentReferenceHashMapinstance. | 
| ConcurrentReferenceHashMap(int initialCapacity,
                          float loadFactor,
                          int concurrencyLevel)Create a new  ConcurrentReferenceHashMapinstance. | 
| ConcurrentReferenceHashMap(int initialCapacity,
                          float loadFactor,
                          int concurrencyLevel,
                          ConcurrentReferenceHashMap.ReferenceType referenceType)Create a new  ConcurrentReferenceHashMapinstance. | 
| ConcurrentReferenceHashMap(int initialCapacity,
                          int concurrencyLevel)Create a new  ConcurrentReferenceHashMapinstance. | 
| Modifier and Type | Method and Description | 
|---|---|
| protected static int | calculateShift(int minimumValue,
              int maximumValue)Calculate a shift value that can be used to create a power-of-two value between
 the specified maximum and minimum values. | 
| void | clear() | 
| boolean | containsKey(java.lang.Object key) | 
| protected ConcurrentReferenceHashMap.ReferenceManager | createReferenceManager()Factory method that returns the  ConcurrentReferenceHashMap.ReferenceManager. | 
| java.util.Set<java.util.Map.Entry<K,V>> | entrySet() | 
| V | get(java.lang.Object key) | 
| protected int | getHash(java.lang.Object o)Get the hash for a given object, apply an additional hash function to reduce
 collisions. | 
| protected float | getLoadFactor() | 
| V | getOrDefault(java.lang.Object key,
            V defaultValue) | 
| protected ConcurrentReferenceHashMap.Reference<K,V> | getReference(java.lang.Object key,
            ConcurrentReferenceHashMap.Restructure restructure)Return a  ConcurrentReferenceHashMap.Referenceto theConcurrentReferenceHashMap.Entryfor the specifiedkey,
 ornullif not found. | 
| protected ConcurrentReferenceHashMap.Segment | getSegment(int index) | 
| protected int | getSegmentsSize() | 
| boolean | isEmpty() | 
| void | purgeUnreferencedEntries()Remove any entries that have been garbage collected and are no longer referenced. | 
| V | put(K key,
   V value) | 
| V | putIfAbsent(K key,
           V value) | 
| V | remove(java.lang.Object key) | 
| boolean | remove(java.lang.Object key,
      java.lang.Object value) | 
| V | replace(K key,
       V value) | 
| boolean | replace(K key,
       V oldValue,
       V newValue) | 
| int | size() | 
clone, containsValue, equals, hashCode, keySet, putAll, toString, valuesfinalize, getClass, notify, notifyAll, wait, wait, waitpublic ConcurrentReferenceHashMap()
ConcurrentReferenceHashMap instance.public ConcurrentReferenceHashMap(int initialCapacity)
ConcurrentReferenceHashMap instance.initialCapacity - the initial capacity of the mappublic ConcurrentReferenceHashMap(int initialCapacity,
                                  float loadFactor)
ConcurrentReferenceHashMap instance.initialCapacity - the initial capacity of the maploadFactor - the load factor. When the average number of references per table
 exceeds this value resize will be attemptedpublic ConcurrentReferenceHashMap(int initialCapacity,
                                  int concurrencyLevel)
ConcurrentReferenceHashMap instance.initialCapacity - the initial capacity of the mapconcurrencyLevel - the expected number of threads that will concurrently
 write to the mappublic ConcurrentReferenceHashMap(int initialCapacity,
                                  ConcurrentReferenceHashMap.ReferenceType referenceType)
ConcurrentReferenceHashMap instance.initialCapacity - the initial capacity of the mapreferenceType - the reference type used for entries (soft or weak)public ConcurrentReferenceHashMap(int initialCapacity,
                                  float loadFactor,
                                  int concurrencyLevel)
ConcurrentReferenceHashMap instance.initialCapacity - the initial capacity of the maploadFactor - the load factor. When the average number of references per
 table exceeds this value, resize will be attempted.concurrencyLevel - the expected number of threads that will concurrently
 write to the mappublic ConcurrentReferenceHashMap(int initialCapacity,
                                  float loadFactor,
                                  int concurrencyLevel,
                                  ConcurrentReferenceHashMap.ReferenceType referenceType)
ConcurrentReferenceHashMap instance.initialCapacity - the initial capacity of the maploadFactor - the load factor. When the average number of references per
 table exceeds this value, resize will be attempted.concurrencyLevel - the expected number of threads that will concurrently
 write to the mapreferenceType - the reference type used for entries (soft or weak)protected final float getLoadFactor()
protected final int getSegmentsSize()
protected final ConcurrentReferenceHashMap.Segment getSegment(int index)
protected ConcurrentReferenceHashMap.ReferenceManager createReferenceManager()
ConcurrentReferenceHashMap.ReferenceManager.
 This method will be called once for each ConcurrentReferenceHashMap.Segment.protected int getHash(java.lang.Object o)
ConcurrentHashMap. Subclasses can override to provide alternative hashing.o - the object to hash (may be null)public V get(java.lang.Object key)
public boolean containsKey(java.lang.Object key)
protected final ConcurrentReferenceHashMap.Reference<K,V> getReference(java.lang.Object key, ConcurrentReferenceHashMap.Restructure restructure)
ConcurrentReferenceHashMap.Reference to the ConcurrentReferenceHashMap.Entry for the specified key,
 or null if not found.key - the key (can be null)restructure - types of restructure allowed during this callnull if not foundpublic V remove(java.lang.Object key)
public boolean remove(java.lang.Object key,
                      java.lang.Object value)
public void clear()
public void purgeUnreferencedEntries()
public int size()
public boolean isEmpty()
protected static int calculateShift(int minimumValue,
                                    int maximumValue)
minimumValue - the minimum valuemaximumValue - the maximum value1 << shift to obtain a value)