WeakHashMap にデータを格納したいのですが、問題があります。コードがあるとします。
public class WeakMapTest {
public static void main(String[] args) {
WeakHashMap<Object, Object> map = new WeakHashMap<Object, Object>();
map.put(null, 0);
map.put(new Integer(1), null);
map.put(new Integer(2), 2);
System.out.println(map.get(new Integer(2)));
System.gc(); //assume this call made implicitly by JVM
if (map.containsKey(new Integer(2))) {
System.out.println(map.get(new Integer(2)));
} else {
System.out.println("Key is deleted");
}
}
}
出力は
2
Key is deleted
これは論理的です。
しかし、別のケースがあります:
if (map.containsKey(new Integer(2))) {
System.gc(); //assume this call made implicitly by JVM
System.out.println(map.get(new Integer(2)));
} else {
System.out.println("Key is deleted");
}
結果はそれほど良くありません:
2
null
このような誤解を招く結果を避けるにはどうすればよいですか? 値とキーは null になる可能性があることに注意してください。