一 代码示例
import java.util.*; public class WeakHashMapTest { public static void main(String[] args) { WeakHashMap whm = new WeakHashMap(); //HashMap whm = new HashMap(); // 将WeakHashMap中添加三个key-value对, // 三个key都是匿名字符串对象(没有其他引用) whm.put(new String("英语") , new String("优秀")); whm.put(new String("数学") , new String("及格")); whm.put(new String("英文") , new String("中等")); //将 WeakHashMap中添加一个key-value对, // 该key是一个系统缓存的字符串对象。 whm.put("java" , new String("中等")); // ① // 输出whm对象,将看到4个key-value对。 System.out.println(whm); // 通知系统立即进行垃圾回收 System.gc(); System.runFinalization(); // 通常情况下,将只看到一个key-value对。 System.out.println(whm); } }
二 运行结果
{英文=中等, java=中等, 数学=及格, 英语=优秀}
{java=中等}
当whm用HashMap创建时,结果如下。
{java=中等, 英文=中等, 数学=及格, 英语=优秀}
{java=中等, 英文=中等, 数学=及格, 英语=优秀}
三 结果分析
如果WeakHashMap对象的key所引用的对象没有被其他强引用变量所引用,则这些key所引用的对象可能被垃圾回收,WeakHashMap也可能自动删除这些key所对应的key-value对象。