WeakHashMap的等价物是什么?

29

HashSet<WeakReference<T>>WeakHashMap<T>Set等效物吗?也就是说,当它们不再被引用时,条目是否会被自动删除?

如果不是,那么该如何实现相同的功能?


相信这可能是您正在寻找的内容:https://dev59.com/5W855IYBdhLWcg3w75Iv#4062950 - dardo
可能是为什么存在WeakHashMap,但不存在WeakSet?的重复问题。 - Oliver Charlesworth
3
这个问题并非重复。另一个问题试图回答为什么没有WeakSet,它没有提供Set的等价物,也没有回答我上面的例子是否算作等价物。 - Barry Fruitman
1个回答

36
不会,如果集合中的一个WeakReference引用的对象被垃圾回收了,该WeakReference仍将包含在集合中,并且不会自动删除,但它们的referent将为null。当键被垃圾回收时,WeakHashMap使用额外的代码从映射中删除弱引用键。
一个等价于WeakHashMap的集合是:
Set<T> set = Collections.newSetFromMap(new WeakHashMap<T, Boolean>()); 

作为一个HashSet,它内部也使用了HashMap。
顺便说一下:WeakReference只是指向一个对象的对象,该对象可能会被垃圾回收,尽管WeakReference持有引用。与所有其他对象一样,只有在没有任何地方强烈引用它时,WeakReference本身才会被垃圾回收。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接