WeakHashMap的实际用途是什么?

时间:2018-12-03 18:28:57

标签: java collections

在Java中,我们具有WeakHashMap内置数据结构。我已经阅读了有关它的文档。我想知道weakhashmap的实际用例是什么??

1 个答案:

答案 0 :(得分:1)

通常的用例是将与对象有关的信息与对象本身分开存储,而不将对象锁定在内存中。您要这样做的原因有两个:

  • 以无法伪造的方式对对象进行标记(例如,“我以前见过这个对象,还是只是我之前见过的对象的完美副本?”)
  • 存储有关对象的真正私有信息(请记住private字段可以通过反射来访问)

粗略的概念示例:

class Example {
    private static WeakHashMap<Example, Data> details = new WeakHashMap<>();

    private static class Data {
        // ...private information...
    }

    public Example() {
        Data d = new Data();
        details.set(this, d);
    }

    public void doSomething() {
        Data d = details.get(this);
        if (d == null) {
            throw new IllegalStateException();
        }
        // ...do something...
    }
}

由于键被弱锁,因此即使调用方在地图中将其用作键,调用方释放其引用仍可以对其进行垃圾回收。

可能值得注意的是,您至少要使界面或其他内容不清楚,因为...可以通过反射来访问私有字段,因此可以从{{ 1}},然后使用对象引用从中获取details对象。稍微提高标准。 :-)