为什么存在 WeakHashMap,但没有 WeakSet?Collections.newSetFromMap

来自 J. 布洛赫

一个。。。内存泄漏的来源是侦听器...确保及时垃圾回收回调的最佳方法是仅存储对它们的弱引用,例如,仅将它们作为键存储在 WeakHashMap 中。

那么,为什么Java Collections框架中没有任何WeakSet呢?


答案 1

Collections.newSetFromMap

Set<Object> weakHashSet = 
    Collections.newSetFromMap(
        new WeakHashMap<Object, Boolean>()
    );

Collections.newSetFromMap 文档中所示,传递 WeakHashMap 以获取 Set


答案 2

虽然你确实可以使用 Collections.newSetFromMap() 来获得一个 WeakSet,但它的用例实际上非常有限。

如果你想实现类似的东西,你可能想看看Guava的Interners.newWeakInterner()功能。String.intern()