我想在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
如何避免这种误导性结果?请记住,值和键可以为空。
答案 0 :(得分:1)
在我写这个问题时找到我的解决方案,所以我决定分享。
Object value = map.get(new Integer(2));
if (map.containsKey(new Integer(2))) {
System.gc(); // can happen here
System.out.println(value);
} else {
System.out.println("Key is deleted");
}
我必须先获得价值,然后检查密钥是否存在。这样我就可以防止错误的结果。目前的结果是:
2
2
这是正确的,至少在我的情况下。