Map interface, with
weak keys.
An entry in a WeakHashMap will automatically be removed when
its key is no longer in ordinary use. More precisely, the presence of a
mapping for a given key will not prevent the key from being discarded by the
garbage collector, that is, made finalizable, finalized, and then reclaimed.
When a key has been discarded its entry is effectively removed from the map,
so this class behaves somewhat differently from other Map
implementations.
Both null values and the null key are supported. This class has
performance characteristics similar to those of the HashMap
class, and has the same efficiency parameters of initial capacity
and load factor.
Like most collection classes, this class is not synchronized.
A synchronized WeakHashMap may be constructed using the
Collections.
method.
This class is intended primarily for use with key objects whose
equals methods test for object identity using the
== operator. Once such a key is discarded it can never be
recreated, so it is impossible to do a lookup of that key in a
WeakHashMap at some later time and be surprised that its entry
has been removed. This class will work perfectly well with key objects
whose equals methods are not based upon object identity, such
as String instances. With such recreatable key objects,
however, the automatic removal of WeakHashMap entries whose
keys have been discarded may prove to be confusing.
The behavior of the WeakHashMap class depends in part upon
the actions of the garbage collector, so several familiar (though not
required) Map invariants do not hold for this class. Because
the garbage collector may discard keys at any time, a
WeakHashMap may behave as though an unknown thread is silently
removing entries. In particular, even if you synchronize on a
WeakHashMap instance and invoke none of its mutator methods, it
is possible for the size method to return smaller values over
time, for the isEmpty method to return false and
then true, for the containsKey method to return
true and later false for a given key, for the
get method to return a value for a given key but later return
null, for the put method to return
null and the remove method to return
false for a key that previously appeared to be in the map, and
for successive examinations of the key set, the value collection, and
the entry set to yield successively smaller numbers of elements.
Each key object in a WeakHashMap is stored indirectly as
the referent of a weak reference. Therefore a key will automatically be
removed only after the weak references to it, both inside and outside of the
map, have been cleared by the garbage collector.
Implementation Note
The value objects in a
WeakHashMap are held by ordinary strong references. Thus care
should be taken to ensure that value objects do not strongly refer to their
own keys, either directly or indirectly, since that will prevent the keys
from being discarded. Note that a value object may refer indirectly to its
key via the WeakHashMap itself; that is, a value object may
strongly refer to some other key object whose associated value object, in
turn, strongly refers to the key of the first value object. If the values
in the map do not rely on the map holding strong references to them, one way
to deal with this is to wrap values themselves within
WeakReferences before
inserting, as in: m.put(key, new WeakReference(value)),
and then unwrapping upon each get.
The iterators returned by the iterator method of the collections
returned by all of this class's "collection view methods" are
fail-fast: if the map is structurally modified at any time after the
iterator is created, in any way except through the iterator's own
remove method, the iterator will throw a ConcurrentModificationException. Thus, in the face of concurrent
modification, the iterator fails quickly and cleanly, rather than risking
arbitrary, non-deterministic behavior at an undetermined time in the future.
Note that the fail-fast behavior of an iterator cannot be guaranteed
as it is, generally speaking, impossible to make any hard guarantees in the
presence of unsynchronized concurrent modification. Fail-fast iterators
throw ConcurrentModificationException on a best-effort basis.
Therefore, it would be wrong to write a program that depended on this
exception for its correctness: the fail-fast behavior of iterators
should be used only to detect bugs.
This class is a member of the Java Collections Framework.
java.util.HashMap , java.lang.ref.WeakReference
| Modifier and Type | Class and Description |
|---|---|
| private static class | WeakHashMap.
The entries in this hash table extend WeakReference, using its main ref field as the key. |
| private class | |
| private class | |
| pack-priv static class | |
| private abstract class | |
| private class | |
| private class | |
| pack-priv static class | |
| private class | |
| private class | |
| pack-priv static class | |
| pack-priv static class | WeakHashMap.
Similar form as other hash Spliterators, but skips dead elements. |
| Modifier and Type | Field and Description |
|---|---|
| private static final int | DEFAULT_INITIAL_CAPACITY
The default initial capacity -- MUST be a power of two. |
| private static final float | DEFAULT_LOAD_FACTOR
The load factor used when none specified in constructor. |
| private transient Set | |
| private final float | loadFactor
The load factor for the hash table. |
| private static final int | MAXIMUM_CAPACITY
The maximum capacity, used if a higher value is implicitly specified by either of the constructors with arguments. |
| pack-priv int | modCount
The number of times this WeakHashMap has been structurally modified. |
| private static final Object | NULL_KEY
Value representing null keys inside tables. |
| private final ReferenceQueue | queue
Reference queue for cleared WeakEntries |
| private int | size
The number of key-value mappings contained in this weak hash map. |
| pack-priv WeakHashMap. | table
The table, resized as necessary. |
| private int | threshold
The next size value at which to resize (capacity * load factor). |
| Access | Constructor and Description |
|---|---|
| public | WeakHashMap(int
The initial capacity of the initialCapacity, float WeakHashMapThe load factor of the loadFactor)WeakHashMapConstructs a new, empty |
| public | WeakHashMap(int
The initial capacity of the initialCapacity)WeakHashMapConstructs a new, empty |
| public | WeakHashMap()
Constructs a new, empty |
| public | WeakHashMap(Map<? extends K, ? extends V>
the map whose mappings are to be placed in this map m)Constructs a new |
| Modifier and Type | Method and Description |
|---|---|
| public void | clear()
Overrides java. Implements java. Removes all of the mappings from this map. |
| public boolean | Returns: true if there is a mapping for key;
false otherwiseThe key whose presence in this map is to be tested key)Overrides java. Implements java. Returns |
| private boolean | |
| public boolean | Returns: true if this map maps one or more keys to the
specified valuevalue whose presence in this map is to be tested value)Overrides java. Implements java. Returns |
| public Set | entrySet()
Implements abstract java. Implements java. Returns a |
| private void | |
| public void | forEach(BiConsumer<? super K, ? super V> action)
Overrides default java. Performs the given action for each entry in this map until all entries have been processed or the action throws an exception. |
| public V | get(Object key)
Overrides java. Implements java. Returns the value to which the specified key is mapped,
or |
| pack-priv WeakHashMap. | |
| private WeakHashMap. | |
| pack-priv final int | |
| private static int | |
| public boolean | isEmpty()
Overrides java. Implements java. Returns |
| public Set | keySet()
Overrides java. Implements java. Returns a |
| private static Object | |
| private boolean | matchesKey(WeakHashMap.
Checks for equality of non-null reference x and possibly-null y. |
| private WeakHashMap. | |
| public static < the type of keys maintained by the new map K, the type of mapped values V> WeakHashMap | Returns: the newly created mapthe expected number of mappings numMappings)Creates a new, empty WeakHashMap suitable for the expected number of mappings. |
| public V | Returns: the previous value associated withkey, or
null if there was no mapping for key.
(A null return can also indicate that the map
previously associated null with key.)key with which the specified value is to be associated. key, V value to be associated with the specified key. value)Overrides java. Implements java. Associates the specified value with the specified key in this map. |
| public void | putAll(Map<? extends K, ? extends V>
mappings to be stored in this map. m)Overrides java. Implements java. Copies all of the mappings from the specified map to this map. |
| public V | Returns: the previous value associated withkey, or
null if there was no mapping for keykey whose mapping is to be removed from the map key)Overrides java. Implements java. Removes the mapping for a key from this weak hash map if it is present. |
| pack-priv boolean | |
| public void | replaceAll(BiFunction<? super K, ? super V, ? extends V> function)
Overrides default java. Replaces each entry's value with the result of invoking the given function on that entry until all entries have been processed or the function throws an exception (optional operation). |
| pack-priv void | resize(int
the new capacity, MUST be a power of two;
must be greater than current capacity unless current
capacity is MAXIMUM_CAPACITY (in which case value
is irrelevant). newCapacity)Rehashes the contents of this map into a new array with a larger capacity. |
| public int | size()
Overrides java. Implements java. Returns the number of key-value mappings in this map. |
| private void | transfer(WeakHashMap.
Transfers all entries from src to dest tables |
| pack-priv static Object | |
| public Collection | values()
Overrides java. Implements java. Returns a |