K
-钥匙的Map保持型
V
-映射的值的类型
public class WeakHashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>
支持两个空值和空键。这类有类似的HashMap级的性能特点,并具有相同的效率参数的初始容量和加载因子。
像大多数集合类,这个类不同步。同步WeakHashMap可以使用Collections.synchronizedMap
方法构建。
这类主要用于关键对象的equals方法测试对象标识的使用==算子。一旦这样的关键是抛弃它不会重现,所以它是不可能的,关键在查找WeakHashMap在稍后的时间感到惊讶,它的入口已被删除。本课程将以其equals方法不是基于对象身份的关键对象很好地工作,如String实例。这样可重建的关键对象,然而,对WeakHashMap条目的钥匙已经被废弃的自动去除可能是混乱的。
该WeakHashMap类的行为部分取决于垃圾收集器的行为,所以几个熟悉的(但不是必需的)Map不变量不持有这类。因为垃圾收集器可以丢弃在任何时间的钥匙,一个WeakHashMap可能表现得好像一个未知的线程是默默的删除条目。特别是,即使你对一个WeakHashMap实例并调用其mutator方法没有,对size方法返回较小的值随着时间的推移,这是可能的,因为返回的isEmpty false方法然后true,为containsKey方法返回true后来false对于一个给定的关键,以换取鉴于关键但后来返回null值的get方法,为put返回null和返回键,先前出现在Mapfalse的remove方法和密钥集的连续检查,收藏价值,和入口设置产量依次较小数量的元素。
在WeakHashMap每个键对象存储间接为弱引用参考。因此,一个键将自动删除后,只有弱引用它,无论是内部和外部的Map,已被清除的垃圾收集器。
实现注意:价值对象在WeakHashMap由普通的强引用举行。因此应注意,以确保值对象不强烈地引用他们自己的键,无论是直接或间接,因为这将防止密钥被丢弃。注意一个值对象可以间接地通过其关键WeakHashMap本身;就是一种价值目标可能会强烈地指其他一些关键对象的关联的值对象,反过来,强指的是关键的第一个值对象。如果在Map的价值不依赖图持强引用它们,处理这个问题的方法之一是把价值本身在WeakReferences之前插入,如:m.put(key, new WeakReference(value)),然后展开在每get。
迭代器返回的集合的iterator方法所有这一类的“集合视图的方法”快速失败返回:如果Map的结构修改,迭代器创建后的任何时间,以任何方式除了通过迭代器的remove方法,迭代器将抛出一个ConcurrentModificationException
。因此,在并发修改的面前,迭代器失败迅速和干净,而不是冒着任意的,非确定性的行为在未来的一个不确定的时间。
注意迭代器不能快速失败行为得到保证的话,一般来说,不可能在不同步的并发修改的存在作出难以保证。快速失败迭代器扔ConcurrentModificationException尽最大努力的基础上。因此,要写一个程序,依靠这一例外的正确性错误:快速失败迭代器的行为只能用来检测错误。
这个班的一员 Java Collections Framework。
HashMap
,
WeakReference
AbstractMap.SimpleEntry<K,V>, AbstractMap.SimpleImmutableEntry<K,V>
Constructor and Description |
---|
WeakHashMap()
构建了一个新的、空的
WeakHashMap具有默认初始容量(16)和负载因子(0.75)。
|
WeakHashMap(int initialCapacity)
构建了一个新的、空的
WeakHashMap与给定的初始容量和加载因子(0.75)。
|
WeakHashMap(int initialCapacity, float loadFactor)
构建了一个新的、空的
WeakHashMap与给定的初始容量和给定的负载因子。
|
WeakHashMap(Map<? extends K,? extends V> m)
构建了一种新的
WeakHashMap作为指定Map相同的映射。
|
Modifier and Type | Method and Description |
---|---|
void |
clear()
从这个映射中移除所有的映射。
|
boolean |
containsKey(Object key)
返回
true如果这Map包含一个指定的键映射。
|
boolean |
containsValue(Object value)
返回
true如果映射到指定的值的一个或多个键。
|
Set<Map.Entry<K,V>> |
entrySet()
返回一个
Set 映射的视图包含在这个Map。
|
void |
forEach(BiConsumer<? super K,? super V> action)
在该映射中的每个条目执行给定的操作,直到所有的条目被处理或操作抛出异常。
|
V |
get(Object key)
返回指定的键映射的值,或
null 如果这个Map不包含的键映射。
|
boolean |
isEmpty()
返回
true如果这个Map不包含键值的映射。
|
Set<K> |
keySet()
返回一个
Set 查看键包含在这个Map。
|
V |
put(K key, V value)
将指定的值与此映射中的指定键关联。
|
void |
putAll(Map<? extends K,? extends V> m)
从指定的映射到该Map的所有映射。
|
V |
remove(Object key)
如果存在的话,从这个弱哈希映射中移除一个键的映射。
|
void |
replaceAll(BiFunction<? super K,? super V,? extends V> function)
将每个条目的值替换为在该项上调用给定函数的结果,直到所有的条目都被处理或函数抛出异常。
|
int |
size()
返回这个映射中的键值映射的数目。
|
Collection<V> |
values()
返回一个
Collection 视图的值包含在这个Map。
|
clone, equals, hashCode, toString
finalize, getClass, notify, notifyAll, wait, wait, wait
compute, computeIfAbsent, computeIfPresent, equals, getOrDefault, hashCode, merge, putIfAbsent, remove, replace, replace
public WeakHashMap(int initialCapacity, float loadFactor)
initialCapacity
的
WeakHashMap初始容量
loadFactor
的
WeakHashMap负荷系数
IllegalArgumentException
如果初始容量为负,或者负载因子是负的。
public WeakHashMap(int initialCapacity)
initialCapacity
的
WeakHashMap初始容量
IllegalArgumentException
-如果初始容量负
public WeakHashMap()
public WeakHashMap(Map<? extends K,? extends V> m)
m
的映射被放置在这个Map的Map
NullPointerException
-如果指定的Map是空的
public int size()
public boolean isEmpty()
public V get(Object key)
null
如果这个Map不包含的键映射。
更正式地说,如果这个图中包含了从关键k
到价值v
这样(key==null ? k==null : key.equals(k))
映射,那么这个方法返回v
;否则返回null
。(最多可以有一个这样的映射。)
一个null
返回值不必要地表明Map不包含的键映射;也有可能是Map明确地映射到null
关键。的containsKey
操作可用于区分这两例。
get
接口
Map<K,V>
get
方法重写,继承类
AbstractMap<K,V>
key
-关键的相关值被返回
null
如果这个Map不包含的键映射
put(Object, Object)
public boolean containsKey(Object key)
containsKey
接口
Map<K,V>
containsKey
方法重写,继承类
AbstractMap<K,V>
key
-关键的在这个Map的存在是进行测试
public void putAll(Map<? extends K,? extends V> m)
putAll
接口
Map<K,V>
putAll
方法重写,继承类
AbstractMap<K,V>
m
映射被存储在这个Map。
NullPointerException
-如果指定的Map是空的。
public V remove(Object key)
(key==null ? k==null : key.equals(k))
映射,映射被删除。(Map最多只能包含一个这样的映射。)
回到这个Map以前相关的关键字的值,或null如果Map中没有包含的键映射。一个null返回值不必要地表明Map中没有包含的键映射;也有可能是Map明确地映射到null关键。
一旦调用返回的映射将不包含指定的键的映射。
public void clear()
public boolean containsValue(Object value)
containsValue
接口
Map<K,V>
containsValue
方法重写,继承类
AbstractMap<K,V>
value
-在这个Map的存在价值进行测试
public Set<K> keySet()
Set
查看键包含在这个Map。该集合是由Map的支持,所以对Map的变化反映在集合中,反之亦然。如果Map是在设置一个迭代过程中修改(除非通过迭代器的
remove操作),迭代的结果是不确定的。设置支持元素的去除,从Map中移除相应的映射,通过
Iterator.remove,
Set.remove,
removeAll,
retainAll,和
clear操作。它不支持
add或
addAll操作。
public Collection<V> values()
Collection
的价值观包含在这个Map。集合是由Map支持的,所以对Map的变化反映在集合中,反之亦然。如果Map是在集合的迭代进行修改(除非通过迭代器的
remove操作),迭代的结果是不确定的。收集支持元素的去除,从Map中移除相应的映射,通过
Iterator.remove,
Collection.remove,
removeAll,
retainAll和
clear操作。它不支持
add或
addAll操作。
public Set<Map.Entry<K,V>> entrySet()
Set
映射的视图包含在这个Map。该集合是由Map的支持,所以对Map的变化反映在集合中,反之亦然。如果Map是在设置一个迭代过程中修改(除非通过迭代器的
remove操作,或通过
setValue操作返回的迭代器的映射项)的迭代的结果是不确定的。设置支持元素的去除,从Map中移除相应的映射,通过
Iterator.remove,
Set.remove,
removeAll,
retainAll和
clear操作。它不支持
add或
addAll操作。
public void forEach(BiConsumer<? super K,? super V> action)
Map
public void replaceAll(BiFunction<? super K,? super V,? extends V> function)
Map
replaceAll
接口
Map<K,V>
function
-功能适用于每一个条目
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.