WeakHashMap<String, Data> map = new WeakHashMap<>(); map.put("常量字符串", new Data()); // 这个键永远不会被回收 1. 2. 3. 字符串字面量会存在于常量池中,它们通常有永久性的强引用,使用它们作为键会导致 WeakHashMap 失去自动清理的优势。 解决办法:使用新创建的字符串对象作为键
2. WeakHashMap的原理WeakHashMap是java.util包下的一个特殊Map实现,它的键(key)是使用弱引用(WeakReference)来存储的。在Java中,弱引用是一种相对于强引用的引用类型,当对象仅被弱引用引用时,垃圾回收器可能会在任意时刻回收该对象。这意味着,如果某个键只有WeakHashMap中的弱引用在引用它,而没有其他强...
WeakHashMap,此种Map的特点是,当除了自身有对key的引用外,此key没有其他引用那么此map会自动丢弃此值, 见实例:此例子中声明了两个Map对象,一个是HashMap,一个是WeakHashMap,同时向两个map中放入a、b两个对象,当HashMap remove掉a 并且将a、b都指向null时,WeakHashMap中的a将自动被回收掉。出现这个状况的原...
//WeakHashMap是采用拉链法实现的,每一个Entry本质上是一个单向链表privateEntry[] table;//WeakHashMap的大小,它是WeakHashMap保存的键值对的数量privateintsize;//WeakHashMap的阈值,用于判断是否需要调整WeakHashMap的容量(threshold = 容量*加载因子)privateintthreshold;//加载因子实际大小privatefinalfloatloadFacto...
public class WeakHashMap<K, V> extends AbstractMap<K, V> implements Map<K, V> 如上所示,它实现了Map接口并扩展了AbstractMap类。 2. 使用WeakHashMap 2.1 创建WeakHashMap 我们可以使用以下构造函数来创建WeakHashMap: WeakHashMap():用于创建具有默认初始容量16和默认负载因子0.75的空Map。
WeakHashMap: 键为弱引用,回收键后自动删除key-value对象。 import java.lang.ref.WeakReference;/** * 引用分类:强、软、弱、虚 * 强与弱引用*/publicclassRefDemo {publicstaticvoidmain(String[] args) {//"bjsxt is very good"存放在字符串常量池中,是共享的, 不能回收。String str ="bjsxt is very...
简单来说,WeakHashMap实现了Map接口,基于hash-table实现,在这种Map中,key的类型是WeakReference。如果对应的key被回收,则这个key指向的对象会被从Map容器中移除。 WeakHashMap跟普通的HashMap不同,WeakHashMap的行为一定程度上基于垃圾收集器的行为,因此一些Map数据结构对应的常识在WeakHashMap上会失效——size()方法的...
importjava.util.Map;importjava.util.WeakHashMap;classResource{// 假设Resource类代表一个资源对象,例如数据库连接、文件句柄等privateString name;publicResource(String name){this.name=name;}publicvoiddoSomething(){System.out.println("Doing something with resource: "+name);}}publicclassResourceCache{privat...
IdentityHashMap、WeakHashMap和EnumMap都是java集合中实现Map接口的类。但是它们之间存在着一些区别。 1.以期在迭代时进行修改。 IdentityHashMap的工作。 // Java program to illustrate the// working of IdentityHashmapimportjava.util.*;publicclassIteratingIdentityHashMap{publicstaticvoidmain(String[]...
public class WeakHashMap_Demo { private static Map map; public static void main (String args[]) { map = new WeakHashMap(); map.put(new String("Maine"), "Augusta"); Runnable runner = new Runnable() { public void run() { while (map.containsKey("Maine")) { ...