Class AbstractReferenceMap<K,V> 
- Type Parameters:
- K- the type of the keys in this map
- V- the type of the values in this map
- All Implemented Interfaces:
- Map<K,,- V> - Get<K,,- V> - IterableGet<K,,- V> - IterableMap<K,,- V> - Put<K,- V> 
- Direct Known Subclasses:
- ReferenceIdentityMap,- ReferenceMap
 This class implements all the features necessary for a subclass reference
 hash-based map. Key-value entries are stored in instances of the
 ReferenceEntry class which can be overridden and replaced.
 The iterators can similarly be replaced, without the need to replace the KeySet,
 EntrySet and Values view classes.
 
Overridable methods are provided to change the default hashing behavior, and to change how entries are added to and removed from the map. Hopefully, all you need for unusual subclasses is here.
 When you construct an AbstractReferenceMap, you can specify what
 kind of references are used to store the map's keys and values.
 If non-hard references are used, then the garbage collector can remove
 mappings if a key or value becomes unreachable, or if the JVM's memory is
 running low. For information on how the different reference types behave,
 see Reference.
 
 Different types of references can be specified for keys and values.
 The keys can be configured to be weak but the values hard,
 in which case this class will behave like a
 
 WeakHashMap. However, you can also specify hard keys and
 weak values, or any other combination. The default constructor uses
 hard keys and soft values, providing a memory-sensitive cache.
 
 This Map implementation does not allow null elements.
 Attempting to add a null key or value to the map will raise a
 NullPointerException.
 
 All the available iterators can be reset back to the start by casting to
 ResettableIterator and calling reset().
 
 This implementation is not synchronized.
 You can use Collections.synchronizedMap(java.util.Map<K, V>) to
 provide synchronized access to a ReferenceMap.
 
- Since:
- 3.1 (extracted from ReferenceMap in 3.0)
- See Also:
- 
Nested Class SummaryNested ClassesModifier and TypeClassDescriptionprotected static classA MapEntry implementation for the map.static enumEnumerates reference types.Nested classes/interfaces inherited from class org.apache.commons.collections4.map.AbstractHashedMapAbstractHashedMap.EntrySet<K,V>, AbstractHashedMap.EntrySetIterator<K, V>, AbstractHashedMap.HashEntry<K, V>, AbstractHashedMap.HashIterator<K, V>, AbstractHashedMap.HashMapIterator<K, V>, AbstractHashedMap.KeySet<K>, AbstractHashedMap.KeySetIterator<K>, AbstractHashedMap.Values<V>, AbstractHashedMap.ValuesIterator<V> Nested classes/interfaces inherited from class java.util.AbstractMapAbstractMap.SimpleEntry<K,V>, AbstractMap.SimpleImmutableEntry<K, V> 
- 
Field SummaryFields inherited from class org.apache.commons.collections4.map.AbstractHashedMapDEFAULT_CAPACITY, DEFAULT_LOAD_FACTOR, DEFAULT_THRESHOLD, GETKEY_INVALID, GETVALUE_INVALID, MAXIMUM_CAPACITY, NO_NEXT_ENTRY, NO_PREVIOUS_ENTRY, NULL, REMOVE_INVALID, SETVALUE_INVALID
- 
Constructor SummaryConstructorsModifierConstructorDescriptionprotectedConstructor used during deserialization.protectedAbstractReferenceMap(AbstractReferenceMap.ReferenceStrength keyType, AbstractReferenceMap.ReferenceStrength valueType, int capacity, float loadFactor, boolean purgeValues) Constructs a new empty map with the specified reference types, load factor and initial capacity.
- 
Method SummaryModifier and TypeMethodDescriptionvoidclear()Clears this map.booleancontainsKey(Object key) Checks whether the map contains the specified key.booleancontainsValue(Object value) Checks whether the map contains the specified value.protected AbstractReferenceMap.ReferenceEntry<K, V> createEntry(AbstractHashedMap.HashEntry<K, V> next, int hashCode, K key, V value) Creates a ReferenceEntry instead of a HashEntry.Creates an entry set iterator.Creates a key set iterator.Creates a values iterator.protected voidReplaces the superclass method to read the state of this class.protected voidReplaces the superclass method to store the state of this class.entrySet()Returns a set view of this map's entries.Gets the value mapped to the key specified.protected AbstractHashedMap.HashEntry<K, V> Gets the entry mapped to the key specified.protected intGets the hash code for a MapEntry.protected voidinit()Initialize this subclass during construction, cloning or deserialization.booleanisEmpty()Checks whether the map is currently empty.protected booleanisEqualKey(Object key1, Object key2) Compares two keys, in internal converted form, to see if they are equal.protected booleanProvided protected read-only access to the key type.protected booleanProvided protected read-only access to the value type.keySet()Returns a set view of this map's keys.Gets a MapIterator over the reference map.protected voidpurge()Purges stale mappings from this map.protected voidPurges the specified reference.protected voidPurges stale mappings from this map before read operations.protected voidPurges stale mappings from this map before write operations.Puts a key-value mapping into this map.Removes the specified mapping from this map.intsize()Gets the size of the map.values()Returns a collection view of this map's values.Methods inherited from class org.apache.commons.collections4.map.AbstractHashedMapaddEntry, addMapping, calculateNewCapacity, calculateThreshold, checkCapacity, clone, convertKey, destroyEntry, ensureCapacity, entryHashCode, entryKey, entryNext, entryValue, equals, hash, hashCode, hashIndex, isEqualValue, putAll, removeEntry, removeMapping, reuseEntry, toString, updateEntryMethods inherited from class java.lang.Objectfinalize, getClass, notify, notifyAll, wait, wait, waitMethods inherited from interface java.util.Mapcompute, computeIfAbsent, computeIfPresent, forEach, getOrDefault, merge, putIfAbsent, remove, replace, replace, replaceAll
- 
Constructor Details- 
AbstractReferenceMapprotected AbstractReferenceMap()Constructor used during deserialization.
- 
AbstractReferenceMapprotected AbstractReferenceMap(AbstractReferenceMap.ReferenceStrength keyType, AbstractReferenceMap.ReferenceStrength valueType, int capacity, float loadFactor, boolean purgeValues) Constructs a new empty map with the specified reference types, load factor and initial capacity.- Parameters:
- keyType- the type of reference to use for keys; must be- HARD,- SOFT,- WEAK
- valueType- the type of reference to use for values; must be- AbstractReferenceMap.ReferenceStrength.HARD,- SOFT,- WEAK
- capacity- the initial capacity for the map
- loadFactor- the load factor for the map
- purgeValues- should the value be automatically purged when the key is garbage collected
 
 
- 
- 
Method Details- 
clear
- 
containsKeyChecks whether the map contains the specified key.- Specified by:
- containsKeyin interface- Get<K,- V> 
- Specified by:
- containsKeyin interface- Map<K,- V> 
- Overrides:
- containsKeyin class- AbstractHashedMap<K,- V> 
- Parameters:
- key- the key to search for
- Returns:
- true if the map contains the key
- See Also:
 
- 
containsValueChecks whether the map contains the specified value.- Specified by:
- containsValuein interface- Get<K,- V> 
- Specified by:
- containsValuein interface- Map<K,- V> 
- Overrides:
- containsValuein class- AbstractHashedMap<K,- V> 
- Parameters:
- value- the value to search for
- Returns:
- true if the map contains the value
- See Also:
 
- 
createEntryprotected AbstractReferenceMap.ReferenceEntry<K,V> createEntry(AbstractHashedMap.HashEntry<K, V> next, int hashCode, K key, V value) Creates a ReferenceEntry instead of a HashEntry.- Overrides:
- createEntryin class- AbstractHashedMap<K,- V> 
- Parameters:
- next- the next entry in sequence
- hashCode- the hash code to use
- key- the key to store
- value- the value to store
- Returns:
- the newly created entry
 
- 
createEntrySetIteratorCreates an entry set iterator.- Overrides:
- createEntrySetIteratorin class- AbstractHashedMap<K,- V> 
- Returns:
- the entrySet iterator
 
- 
createKeySetIteratorCreates a key set iterator.- Overrides:
- createKeySetIteratorin class- AbstractHashedMap<K,- V> 
- Returns:
- the keySet iterator
 
- 
createValuesIteratorCreates a values iterator.- Overrides:
- createValuesIteratorin class- AbstractHashedMap<K,- V> 
- Returns:
- the values iterator
 
- 
doReadObjectReplaces the superclass method to read the state of this class.Serialization is not one of the JDK's nicest topics. Normal serialization will initialize the superclass before the subclass. Sometimes however, this isn't what you want, as in this case the put()method on read can be affected by subclass state.The solution adopted here is to deserialize the state data of this class in this protected method. This method must be called by the readObject()of the first serializable subclass.Subclasses may override if the subclass has a specific field that must be present before put()orcalculateThreshold()will work correctly.- Overrides:
- doReadObjectin class- AbstractHashedMap<K,- V> 
- Parameters:
- in- the input stream
- Throws:
- IOException- if an error occurs while reading from the stream
- ClassNotFoundException- if an object read from the stream cannot be loaded
 
- 
doWriteObjectReplaces the superclass method to store the state of this class.Serialization is not one of the JDK's nicest topics. Normal serialization will initialize the superclass before the subclass. Sometimes however, this isn't what you want, as in this case the put()method on read can be affected by subclass state.The solution adopted here is to serialize the state data of this class in this protected method. This method must be called by the writeObject()of the first serializable subclass.Subclasses may override if they have a specific field that must be present on read before this implementation will work. Generally, the read determines what must be serialized here, if anything. - Overrides:
- doWriteObjectin class- AbstractHashedMap<K,- V> 
- Parameters:
- out- the output stream
- Throws:
- IOException- if an error occurs while writing to the stream
 
- 
entrySetReturns a set view of this map's entries. An iterator returned entry is valid untilnext()is called again. ThesetValue()method on thetoArrayentries has no effect.
- 
get
- 
getEntryGets the entry mapped to the key specified.- Overrides:
- getEntryin class- AbstractHashedMap<K,- V> 
- Parameters:
- key- the key
- Returns:
- the entry, null if no match
 
- 
hashEntryGets the hash code for a MapEntry. Subclasses can override this, for example to use the identityHashCode.- Parameters:
- key- the key to get a hash code for, may be null
- value- the value to get a hash code for, may be null
- Returns:
- the hash code, as per the MapEntry specification
 
- 
initInitialize this subclass during construction, cloning or deserialization.- Overrides:
- initin class- AbstractHashedMap<K,- V> 
 
- 
isEmpty
- 
isEqualKeyCompares two keys, in internal converted form, to see if they are equal.This implementation converts the key from the entry to a real reference before comparison. - Overrides:
- isEqualKeyin class- AbstractHashedMap<K,- V> 
- Parameters:
- key1- the first key to compare passed in from outside
- key2- the second key extracted from the entry via- entry.key
- Returns:
- true if equal
 
- 
isKeyTypeProvided protected read-only access to the key type.- Parameters:
- type- the type to check against.
- Returns:
- true if keyType has the specified type
 
- 
isValueTypeProvided protected read-only access to the value type.- Parameters:
- type- the type to check against.
- Returns:
- true if valueType has the specified type
 
- 
keySet
- 
mapIteratorGets a MapIterator over the reference map. The iterator only returns valid key/value pairs.- Specified by:
- mapIteratorin interface- IterableGet<K,- V> 
- Overrides:
- mapIteratorin class- AbstractHashedMap<K,- V> 
- Returns:
- a map iterator
 
- 
purgePurges stale mappings from this map.Note that this method is not synchronized! Special care must be taken if, for instance, you want stale mappings to be removed on a periodic basis by some background thread. 
- 
purge
- 
purgeBeforeReadPurges stale mappings from this map before read operations.This implementation calls purge()to maintain a consistent state.
- 
purgeBeforeWritePurges stale mappings from this map before write operations.This implementation calls purge()to maintain a consistent state.
- 
putPuts a key-value mapping into this map. Neither the key nor the value may be null.- Specified by:
- putin interface- Map<K,- V> 
- Specified by:
- putin interface- Put<K,- V> 
- Overrides:
- putin class- AbstractHashedMap<K,- V> 
- Parameters:
- key- the key to add, must not be null
- value- the value to add, must not be null
- Returns:
- the value previously mapped to this key, null if none
- Throws:
- NullPointerException- if either the key or value is null
- See Also:
 
- 
removeRemoves the specified mapping from this map.
- 
size
- 
values
 
-