在其他 Map 实现(如 HashMap)中,键是强可达的。例如,如果 HashMap 具有如下所示的 Person 类的键,并且如果 Person 对象设置为 null,即使在此之后,如果我们执行 map.get(Person),我们也会从内存中获取值,因为键是强引用的在 HashMap 中。
wm.put(person, person.getFirstName());
person = null;
System.gc();
System.out.println("Hash Map :" + wm.toString());
输出:哈希图:{test.Person@12dacd1=John}
与 HashMap 相比,WeakHashMap 是一种一旦键在内存中没有引用就会删除它的条目。例如,如果 WeakHashMap 具有如下所示的 Person 类的键,并且如果 Person 对象设置为 null,那么现在如果您执行 map.get(Person),我们将得到 null,因为该键没有引用(或者说是弱引用)可达)。
wm.put(person, person.getFirstName());
person = null;
System.gc();
System.out.println("Weak Hash Map :" + wm.toString());
输出:弱哈希映射:{}