public class WeakHashMap
extends AbstractMap<K, V>
implements Map<K, V>
java.lang.Object | ||
↳ | java.util.AbstractMap<K, V> | |
↳ | java.util.WeakHashMap<K, V> |
基于哈希表的Map接口实现,具有弱密钥 。 当密钥不再处于正常使用状态时, WeakHashMap中的条目将自动删除。 更准确地说,给定键的映射的存在不会阻止垃圾收集器丢弃该键,也就是说,该键被终止,完成并且然后被回收。 当一个键被丢弃时,它的入口被有效地从地图上删除,所以这个类的行为与其他Map实现有所不同。
支持null值和null键。 该类具有类似于HashMap类的性能特征,并具有与初始容量和负载因数相同的效率参数。
像大多数集合类一样,这个类不同步。 甲同步WeakHashMap可使用被构造Collections.synchronizedMap
方法。
这个类主要用于与主要对象,它们的equals方法测试使用==操作对象标识使用。 一旦这样的密钥被丢弃,它永远不会被重新创建,所以在稍后的时间不可能在WeakHashMap中查找该密钥,并且惊讶于它的输入已被移除。 本课程将与主要对象,其equals方法不是基于对象标识,如String种情况下很好地工作。 但是,使用这种可重新调用的密钥对象时,自动删除其密钥已被丢弃的WeakHashMap条目可能被证明是令人困惑的。
在WeakHashMap类的行为部分取决于垃圾收集器的行为依赖,所以一些熟悉的(虽然不是必需的)Map个不变不持有此类。 因为垃圾收集器可能随时丢弃密钥,所以WeakHashMap可能表现得好像未知的线程正在静默地移除条目一样。 特别是,即使您在WeakHashMap实例上同步并且不调用其任何增变器方法,也可能随着时间的推移size方法返回较小的值, isEmpty方法返回false ,然后返回true ,以便containsKey方法返回true和更高版本false对于给定密钥,对于get方法返回给定密钥的值但稍后返回null ,对于put方法返回null和remove方法返回false以获得以前似乎位于映射,并且对键集,值集合和条目集进行连续检查以产生连续较小数量的元素。
WeakHashMap中的每个关键对象都被间接存储为弱引用的指示对象。 因此,只有在地图内部和外部的弱引用已被垃圾收集器清除之后,才会自动删除键。
实现注意事项: WeakHashMap中的值对象由普通强引用保存。 因此,应该注意确保值对象不直接或间接强烈地引用它们自己的密钥,因为这将防止密钥被丢弃。 请注意,值对象可能通过WeakHashMap本身间接引用其密钥; 也就是说,一个值对象可能强烈地引用其他一些关键对象,其关联的值对象又强烈地指向第一个值对象的关键字。 如果地图中的值不依赖于对地图的强引用,那么解决此问题的一种方法是在插入之前将值自己封装在WeakReferences之前,如: m.put(key, new WeakReference(value)) ,然后展开每个get 。
由所有此类的“集合视图方法”返回的集合的iterator方法返回的迭代器快速失败 :如果在创建迭代器后的任何时候结构性地修改映射,除了通过迭代器自己的remove方法,迭代器会抛出一个ConcurrentModificationException
。 因此,面对并发修改,迭代器快速而干净地失败,而不是在将来某个未确定的时间冒着任意的,非确定性的行为风险。
请注意,迭代器的故障快速行为无法得到保证,因为一般来说,在存在非同步并发修改的情况下不可能做出任何硬性保证。 失败快速迭代器在尽力而为的基础上抛出ConcurrentModificationException 。 因此,编写一个依赖于此异常的程序是正确的: 迭代器的快速失败行为应仅用于检测错误。
本课程是 Java Collections Framework的成员。
也可以看看:
Public constructors |
|
---|---|
WeakHashMap(int initialCapacity, float loadFactor) 用给定的初始容量和给定的加载因子构造一个新的空的 WeakHashMap 。 |
|
WeakHashMap(int initialCapacity) 用给定的初始容量和默认加载因子(0.75)构造一个新的空的 WeakHashMap 。 |
|
WeakHashMap() 使用默认初始容量(16)和负载因子(0.75)构造一个新的空的 WeakHashMap 。 |
|
WeakHashMap(Map<? extends K, ? extends V> m) 使用与指定映射相同的映射构造一个新的 WeakHashMap 。 |
Public methods |
|
---|---|
void |
clear() 从此映射中移除所有映射。 |
boolean |
containsKey(Object key) 如果此映射包含指定键的映射,则返回 true 。 |
boolean |
containsValue(Object value) 如果此映射将一个或多个键映射到指定值,则返回 true 。 |
Set<Entry<K, V>> |
entrySet() 返回此映射中包含的映射的 |
void |
forEach(BiConsumer<? super K, ? super V> action) 对此映射中的每个条目执行给定操作,直到处理完所有条目或操作抛出异常为止。 |
V |
get(Object key) 返回指定键映射到的值,或者如果此映射不包含键映射,则返回 |
boolean |
isEmpty() 如果此映射不包含键 - 值映射,则返回 true 。 |
Set<K> |
keySet() 返回包含在此映射中的键的 |
V |
put(K key, V value) 将指定的值与此映射中指定的键关联。 |
void |
putAll(Map<? extends K, ? extends V> m) 将指定地图中的所有映射复制到此地图。 |
V |
remove(Object key) 如果该弱映射存在,则从该弱映射中除去该映射。 |
void |
replaceAll(BiFunction<? super K, ? super V, ? extends V> function) 用对该条目调用给定函数的结果替换每个条目的值,直到处理完所有条目或者该函数抛出异常。 |
int |
size() 返回此映射中键 - 值映射的数量。 |
Collection<V> |
values() 返回此映射中包含的值的 |
Inherited methods |
|
---|---|
From class java.util.AbstractMap
|
|
From class java.lang.Object
|
|
From interface java.util.Map
|
WeakHashMap (int initialCapacity, float loadFactor)
用给定的初始容量和给定的加载因子构造一个新的空的 WeakHashMap 。
Parameters | |
---|---|
initialCapacity |
int : The initial capacity of the WeakHashMap |
loadFactor |
float : The load factor of the WeakHashMap |
Throws | |
---|---|
IllegalArgumentException |
if the initial capacity is negative, or if the load factor is nonpositive. |
WeakHashMap (int initialCapacity)
用给定的初始容量和默认加载因子(0.75)构造一个新的空白 WeakHashMap 。
Parameters | |
---|---|
initialCapacity |
int : The initial capacity of the WeakHashMap |
Throws | |
---|---|
IllegalArgumentException |
if the initial capacity is negative |
WeakHashMap (Map<? extends K, ? extends V> m)
使用与指定映射相同的映射构造一个新的WeakHashMap 。 WeakHashMap是使用默认加载因子(0.75)和足以容纳指定映射中的映射的初始容量创建的。
Parameters | |
---|---|
m |
Map : the map whose mappings are to be placed in this map |
Throws | |
---|---|
NullPointerException |
if the specified map is null |
boolean containsKey (Object key)
如果此映射包含指定键的映射,则返回 true 。
Parameters | |
---|---|
key |
Object : The key whose presence in this map is to be tested |
Returns | |
---|---|
boolean |
true if there is a mapping for key; false otherwise |
boolean containsValue (Object value)
如果此映射将一个或多个键映射到指定值,则返回 true 。
Parameters | |
---|---|
value |
Object : value whose presence in this map is to be tested |
Returns | |
---|---|
boolean |
true if this map maps one or more keys to the specified value |
Set<Entry<K, V>> entrySet ()
返回此映射中映射的映射的Set
视图。 该集合由地图支持,因此对地图的更改反映在集合中,反之亦然。 如果在对集合进行迭代的过程中修改了映射(除了通过迭代器自己的remove操作或通过迭代器返回的映射条目上的setValue操作),迭代的结果是未定义的。 该组支持元件移除,即从映射中相应的映射,经由Iterator.remove,Set.remove,removeAll,retainAll clear和操作。 它不支持add或addAll操作。
Returns | |
---|---|
Set<Entry<K, V>> |
a set view of the mappings contained in this map |
void forEach (BiConsumer<? super K, ? super V> action)
对此映射中的每个条目执行给定操作,直到处理完所有条目或操作抛出异常为止。 除非实现类另有规定,否则按照条目集迭代的顺序执行操作(如果指定了迭代顺序)。操作抛出的异常会中继给调用者。
Parameters | |
---|---|
action |
BiConsumer : The action to be performed for each entry |
V get (Object key)
返回指定键映射到的值,如果此映射不包含键映射,则返回 null
。
更正式地说,如果这个映射包含从键k
到值v
的映射,例如(key==null ? k==null : key.equals(k))
,则该方法返回v
; 否则返回null
。 (最多可以有一个这样的映射。)
返回值null
不一定表示映射不包含该键的映射; 地图也可能明确将密钥映射到null
。 containsKey
操作可用于区分这两种情况。
Parameters | |
---|---|
key |
Object : the key whose associated value is to be returned |
Returns | |
---|---|
V |
the value to which the specified key is mapped, or null if this map contains no mapping for the key |
也可以看看:
boolean isEmpty ()
如果此映射不包含键 - 值映射,则返回true 。 这个结果是一个快照,并且可能不会反映在下次尝试访问之前将被删除的未处理条目,因为它们不再被引用。
Returns | |
---|---|
boolean |
true if this map contains no key-value mappings |
Set<K> keySet ()
返回此映射中包含的键的Set
视图。 该集合由地图支持,因此对地图的更改反映在集合中,反之亦然。 如果在对集合进行迭代的过程中修改了映射(除了通过迭代器自己的remove操作),迭代的结果是未定义的。 该组支持元件移除,即从映射中相应的映射,经由Iterator.remove,Set.remove,removeAll,retainAll,和clear操作。 它不支持add或addAll操作。
Returns | |
---|---|
Set<K> |
a set view of the keys contained in this map |
V put (K key, V value)
将指定的值与此映射中指定的键关联。 如果映射先前包含此键的映射,则旧值将被替换。
Parameters | |
---|---|
key |
K : key with which the specified value is to be associated. |
value |
V : value to be associated with the specified key. |
Returns | |
---|---|
V |
the previous value associated with key, or null if there was no mapping for key. (A null return can also indicate that the map previously associated null with key.) |
void putAll (Map<? extends K, ? extends V> m)
将指定地图中的所有映射复制到此地图。 这些映射将替换此映射对当前指定映射中的任何键的任何映射。
Parameters | |
---|---|
m |
Map : mappings to be stored in this map. |
Throws | |
---|---|
NullPointerException |
if the specified map is null. |
V remove (Object key)
如果该弱映射存在,则从该弱映射中除去该映射。 更正式地说,如果该映射包含从键k到值v的映射(例如(key==null ? k==null : key.equals(k))
,则该映射被移除。 (地图最多可以包含一个这样的映射。)
返回此映射先前与键关联的值,或者如果映射不包含键映射,则返回null 。 返回值null 不一定表示该映射不包含该键的映射; 地图也可能明确将密钥映射到null 。
一旦调用返回,映射将不包含指定键的映射。
Parameters | |
---|---|
key |
Object : key whose mapping is to be removed from the map |
Returns | |
---|---|
V |
the previous value associated with key, or null if there was no mapping for key |
void replaceAll (BiFunction<? super K, ? super V, ? extends V> function)
用对该条目调用给定函数的结果替换每个条目的值,直到处理完所有条目或者该函数抛出异常。 函数抛出的异常会传递给调用者。
Parameters | |
---|---|
function |
BiFunction : the function to apply to each entry |
int size ()
返回此映射中键 - 值映射的数量。 这个结果是一个快照,并且可能不会反映在下次尝试访问之前将被删除的未处理条目,因为它们不再被引用。
Returns | |
---|---|
int |
the number of key-value mappings in this map |
Collection<V> values ()
返回此映射中包含的值的Collection
视图。 该集合由地图支持,因此地图的更改会反映在集合中,反之亦然。 如果在对集合进行迭代的过程中修改了映射(除了通过迭代器自己的remove操作),迭代的结果是未定义的。 该collection支持元素移除,即从映射中相应的映射,经由Iterator.remove,Collection.remove,removeAll,retainAll clear和操作。 它不支持add或addAll操作。
Returns | |
---|---|
Collection<V> |
a collection view of the values contained in this map |