WeakHashMap的基础使用与HashMap类似,详细可以参考另一篇文章点击这里。但是区别在于WeakHashMap对key保留了弱引用,而HashMap对key保留了强引用(对于强弱引用可以参考这篇文章点击这里),所以只要HashMap在则key就一直在,而WeakHashMap中的key则可能会被垃圾回收:
public class Main {
public static void main(String[] args) {
WeakHashMap<String,String> weakHashMap=new WeakHashMap<>();
weakHashMap.put(new String("s"),"sean");
System.gc();
System.out.println(weakHashMap);
}
}
运行结果:
{}
但是改成如下方式创建key:
public class Main {
public static void main(String[] args) {
WeakHashMap<String,String> weakHashMap=new WeakHashMap<>();
weakHashMap.put("s","sean");
System.gc();
System.out.println(weakHashMap);
}
}
运行结果:
{s=sean}
其中的原因在上述另一篇强弱引用的文章中已经说得很清楚了。
需要注意的是,WeakHashMap针对的是key,如果对key弱引用然后被回收则value也被回收。