在这篇文章中,我们将通过实例学习java.util包中的WeakHashMap类。
WeakHashMap
类概述WeakHashMap
类构造函数概要WeakHashMap
类构造函数方法WeakHashMap
类实例WeakHashMap
是一个基于Hash表的Map接口的实现,具有弱键。当WeakHashMap
中的一个条目不再被正常使用时,它的键将被自动删除。
空值和空键都被支持。这个类的性能特征与HashMap类相似,并且具有相同的初始容量和负载因子的效率参数。
像大多数集合类一样,这个类是不同步的。可以使用Collections.synchronizedMap方法构造一个同步的WeakHashMap
。
弱引用--如果一个对象的唯一引用是弱引用,垃圾收集器可以在任何时候回收该对象的内存。它不必等到系统的内存耗尽。通常,它将在下次垃圾收集器运行时被释放。
这个类是Java集合框架的一个成员。
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
,其映射关系与指定的地图相同。void clear()
- 移除此地图中的所有映射。boolean containsKey(Object key)
- 如果这个地图包含指定键的映射,则返回true。boolean containsValue(Object value)
- 如果此地图将一个或多个键映射到指定的值,则返回true。Set<Map.Entry<K,V>> entrySet() -
返回此地图中包含的映射的Set视图。void forEach(BiConsumer<? super K,? super V> action)
- 对这个地图中的每个条目执行给定的操作,直到所有的条目都被处理完,或者该操作抛出一个异常。V get(Object key)
- 返回指定键所映射的值,如果此地图不包含键的映射,则返回空值。boolean isEmpty()
- 如果这个地图不包含键值映射,则返回true。Set 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 values()
- 返回该地图中包含的数值的集合视图。我们知道,当WeakHashMap
中的一个条目不再被外部引用,并且该键要进行垃圾回收时,该条目将被自动删除。在这个例子中,我们创建了两个键值为 "ACTIVE "和 "INACTIVE "的key1和key2。现在将key1设为null并运行程序。输出应该是一个单项。
import java.util.Map;
import java.util.Map.Entry;
import java.util.WeakHashMap;
public class WeakHashMapExample {
public static void main(final String[] args) {
final Map<Key, Project> map = new WeakHashMap<>();
Key key1 = new Key("ACTIVE");
final Key key2 = new Key("INACTIVE");
map.put(key1, new Project(100, "Customer Management System", "Customer Management System"));
map.put(key2, new Project(200, "Employee Management System", "Employee Management System"));
key1 = null;
System.gc();
for (final Entry<Key, Project> entry : map.entrySet()) {
System.out.println(entry.getKey().getKey() + " " + entry.getValue());
}
}
}
class Key {
private String key;
public Key(final String key) {
super();
this.key = key;
}
public String getKey() {
return key;
}
public void setKey(final String key) {
this.key = key;
}
}
输出:
INACTIVE [project id : 200, project name : Employee Management System,
project desc : Employee Management System ]
。
注意,key1是空的,它的元素被删除并被垃圾回收。
https://docs.oracle.com/javase/8/docs/api/java/util/WeakHashMap.html
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.javaguides.net/2018/08/weakhashmap-in-java.html
内容来源于网络,如有侵权,请联系作者删除!