Most visited

Recently visited

Added in API level 1

WeakHashMap

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方法返回nullremove方法返回false以获得以前似乎位于映射,并且对键集,值集合和条目集进行连续检查以产生连续较小数量的元素。

WeakHashMap中的每个关键对象被间接存储为弱引用的指示对象。 因此,只有在地图内部和外部的弱引用已被垃圾收集器清除之后,才会自动删除键。

实现注意事项: WeakHashMap中的值对象由普通强引用保存。 因此,应该注意确保值对象不直接或间接强烈地引用它们自己的密钥,因为这将防止密钥被丢弃。 请注意,值对象可能通过WeakHashMap本身间接引用其密钥; 也就是说,一个值对象可能强烈地引用其他一些关键对象,其关联的值对象又强烈地指向第一个值对象的关键字。 如果地图中的值不依赖于对地图的强引用,那么解决此问题的一种方法是在插入之前将值自己封装在WeakReferences之前,如: m.put(key, new WeakReference(value)) ,然后展开每个get

由所有此类的“集合视图方法”返回的集合的iterator方法返回的迭代器快速失败 :如果在创建迭代器后的任何时候结构性地修改映射,除了通过迭代器自己的remove方法,迭代器会抛出一个ConcurrentModificationException 因此,面对并发修改,迭代器快速而干净地失败,而不是在将来某个未确定的时间冒着任意的,非确定性的行为风险。

请注意,迭代器的故障快速行为无法得到保证,因为一般来说,在存在非同步并发修改的情况下不可能做出任何硬性保证。 失败快速迭代器在尽力而为的基础上抛出ConcurrentModificationException 因此,编写一个依赖于此异常的程序是正确的: 迭代器的快速失败行为应仅用于检测错误。

本课程是 Java Collections Framework的成员。

也可以看看:

Summary

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()

返回此映射中包含的映射的 Set视图。

void forEach(BiConsumer<? super K, ? super V> action)

对此映射中的每个条目执行给定操作,直到处理完所有条目或操作抛出异常为止。

V get(Object key)

返回指定键映射到的值,或者如果此映射不包含键映射,则返回 null

boolean isEmpty()

如果此映射不包含键 - 值映射,则返回 true

Set<K> keySet()

返回包含在此映射中的键的 Set视图。

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()

返回此映射中包含的值的 Collection视图。

Inherited methods

From class java.util.AbstractMap
From class java.lang.Object
From interface java.util.Map

Public constructors

WeakHashMap

Added in API level 1
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

Added in API level 1
WeakHashMap (int initialCapacity)

用给定的初始容量和默认加载因子(0.75)构造一个新的空白 WeakHashMap

Parameters
initialCapacity int: The initial capacity of the WeakHashMap
Throws
IllegalArgumentException if the initial capacity is negative

WeakHashMap

Added in API level 1
WeakHashMap ()

用默认初始容量(16)和负载因子(0.75)构造一个新的空的 WeakHashMap

WeakHashMap

Added in API level 1
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

Public methods

clear

Added in API level 1
void clear ()

从此映射中移除所有映射。 此通话返回后,地图将为空。

containsKey

Added in API level 1
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

containsValue

Added in API level 1
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

entrySet

Added in API level 1
Set<Entry<K, V>> entrySet ()

返回此映射中映射的映射的Set视图。 该集合由地图支持,因此对地图的更改反映在集合中,反之亦然。 如果在对集合进行迭代的过程中修改了映射(除了通过迭代器自己的remove操作或通过迭代器返回的映射条目上的setValue操作),迭代的结果是未定义的。 该组支持元件移除,即从映射中相应的映射,经由Iterator.remove,Set.remove,removeAll,retainAll clear和操作。 它不支持addaddAll操作。

Returns
Set<Entry<K, V>> a set view of the mappings contained in this map

forEach

Added in API level 24
void forEach (BiConsumer<? super K, ? super V> action)

对此映射中的每个条目执行给定操作,直到处理完所有条目或操作抛出异常为止。 除非实现类另有规定,否则按照条目集迭代的顺序执行操作(如果指定了迭代顺序)。操作抛出的异常会中继给调用者。

Parameters
action BiConsumer: The action to be performed for each entry

get

Added in API level 1
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

也可以看看:

isEmpty

Added in API level 1
boolean isEmpty ()

如果此映射不包含键 - 值映射,则返回true 这个结果是一个快照,并且可能不会反映在下次尝试访问之前将被删除的未处理条目,因为它们不再被引用。

Returns
boolean true if this map contains no key-value mappings

keySet

Added in API level 1
Set<K> keySet ()

返回此映射中包含的键的Set视图。 该集合由地图支持,因此对地图的更改反映在集合中,反之亦然。 如果在对集合进行迭代的过程中修改了映射(除了通过迭代器自己的remove操作),迭代的结果是未定义的。 该组支持元件移除,即从映射中相应的映射,经由Iterator.remove,Set.remove,removeAll,retainAll,clear操作。 它不支持addaddAll操作。

Returns
Set<K> a set view of the keys contained in this map

put

Added in API level 1
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.)

putAll

Added in API level 1
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.

remove

Added in API level 1
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

replaceAll

Added in API level 24
void replaceAll (BiFunction<? super K, ? super V, ? extends V> function)

用对该条目调用给定函数的结果替换每个条目的值,直到处理完所有条目或者该函数抛出异常。 函数抛出的异常会传递给调用者。

Parameters
function BiFunction: the function to apply to each entry

size

Added in API level 1
int size ()

返回此映射中键 - 值映射的数量。 这个结果是一个快照,并且可能不会反映在下次尝试访问之前将被删除的未处理条目,因为它们不再被引用。

Returns
int the number of key-value mappings in this map

values

Added in API level 1
Collection<V> values ()

返回此映射中包含的值的Collection视图。 该集合由地图支持,因此地图的更改会反映在集合中,反之亦然。 如果在对集合进行迭代的过程中修改了映射(除了通过迭代器自己的remove操作),迭代的结果是未定义的。 该collection支持元素移除,即从映射中相应的映射,经由Iterator.remove,Collection.remove,removeAll,retainAll clear和操作。 它不支持addaddAll操作。

Returns
Collection<V> a collection view of the values contained in this map

Hooray!