82

来自J. Bloch

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

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

4

2 回答 2

200

Collections.newSetFromMap

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

如文档中所见Collections.newSetFromMap,传递 aWeakHashMap以获取Set.

于 2010-10-31T11:47:54.427 回答
1

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

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

于 2018-03-02T14:00:05.427 回答