来源自J. Bloch
内存泄漏的一个主要源头之一是监听器。为确保回调能够及时垃圾回收,最好的方法是仅使用弱引用存储它们,例如仅将其作为键存储在WeakHashMap中。
那么,为什么Java集合框架中没有WeakSet呢?(参考)
来源自J. Bloch
内存泄漏的一个主要源头之一是监听器。为确保回调能够及时垃圾回收,最好的方法是仅使用弱引用存储它们,例如仅将其作为键存储在WeakHashMap中。
那么,为什么Java集合框架中没有WeakSet呢?(参考)
Collections.newSetFromMap
Set<Object> weakHashSet =
Collections.newSetFromMap(
new WeakHashMap<Object, Boolean>()
);
根据 Collections.newSetFromMap
文档,传递一个 WeakHashMap
可以获取到一个 Set
。newSetFromMap
方法创建的是键的类型对应的Set,而不是值的类型。 - kabuko虽然你确实可以使用Collections.newSetFromMap()
来获取WeakSet,但它的使用情况实际上相当有限。
如果你想要实现类似于String.intern()
的功能,你可能会想要查看Guava的Interners.newWeakInterner()
功能。