HashMapのような他のMap実装では、キーは強力に到達可能です。たとえば、以下に示すように、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());
出力:弱いハッシュマップ:{}