8.6.6 WeakHashMap实现类
8.6.6 WeakHashMap实现类
WeakHashMap与HashMap的用法基本相似。
WeakHashMap和HashMap的区别
WeakHashMap与HashMap的区别在于:
HashMap的key保留了对实际对象的强引用,这意味着:- 只要该
HashMap对象不被销毁,该HashMap的所有key所引用的对象就不会被垃圾回收,HashMap也不会自动删除这些key所对应的key-value对;
- 只要该
Weak HashMap的key只保留了对实际对象的弱引用,这意味着:- 如果
WeakHashMap对象的key所引用的对象没有被其他强引用变量所引用,则这些key所引用的对象可能被垃圾回收,WeakHashMap也可能自动删除这些key所对应的key-value对。
- 如果
WeakHashMap特点
WeakHashMap中的每个key对象只持有对实际对象的弱引用,因此,当垃圾回收了该key所对应的实际对象之后, WeakHashMap会自动删除该key对应的key-value对。
实例
看如下程序:
1 | import java.util.*; |
编译、运行上面程序,看到如下运行结果:
1 | {英文=中等, java=中等, 数学=及格, 语文=良好} |
从上面运行结果可以看出,当系统进行垃圾回收时,删除了WeakHashMap对象的前三个key- value对。这是因为添加前三个key- value对时,这三个key都是匿名的字符串对象,WeakHashMap只保留了对它们的弱引用,这样垃圾回收时会自动删除这三个key-value对。WeakHashMap对象中第4个组key-value对(第①号代码行)的key("java")是一个字符串直接量,(系统会自动保留对该字符串对象的强引用),所以垃圾回收时不会回收它.
使用WeakHashMap要注意什么
如果需要使用WeakHashMap的key来保留对象的弱引用,则不要让该key所引用的象具有任何强引用,否则将失去使用WeakHashMap的意义