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 WeakHashMap The load factor of the loadFactor)WeakHashMap Constructs a new, empty |
public | WeakHashMap(int
The initial capacity of the initialCapacity)WeakHashMap Constructs 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>
The action to be performed for each entry 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
the key whose associated value is to be returned 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 key key 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>
the function to apply to each entry 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 |