Java我可以保证WeakHashMap条目在检查后不会消失

时间:2014-05-12 11:46:13

标签: java weak-references weakhashmap

我想在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

如何避免这种误导性结果?请记住,值和键可以为空。

1 个答案:

答案 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

这是正确的,至少在我的情况下。