2013-10-14 265 views
9

HashSet<WeakReference<T>>Set相當於WeakHashMap<T>?也就是說,會自動將條目刪除不再被引用?相當於WeakHashMap?

如果不是,那麼等效的是什麼?

+0

相信這就是你可能要找的:http://stackoverflow.com/a/4062950/717932 – dardo

+0

可能的重複[爲什麼存在WeakHashMap,但缺少WeakSet?](http://stackoverflow.com/ question/4062919/why-does-exist-weakhashmap-but-absent-weakset) –

+1

這個問題不是重複的。另一個問題試圖回答爲什麼沒有WeakSet。它沒有提供一個Set的等價物,也不回答我的上面的例子是否等價。 –

回答

13

沒有,如果由WeakReference S IN的一組一個引用的對象獲取垃圾回收時,WeakReference仍然會包括在該組並不會被自動刪除,但他們的referentnull。當垃圾收集時,WeakHashMap使用附加代碼從地圖中刪除弱引用的鍵。

一組當量的WeakHashMap的是:

Set<T> set = Collections.newSetFromMap(new WeakHashMap<T, Boolean>()); 

作爲HashSet也使用HashMap內部。

順便提一句:A WeakReference只是一個物體,指向一個物體,儘管WeakReference是由參考文件保存的,但它可能被垃圾收集。 WeakReference本身不會被垃圾收集,除非它不像任何其他對象那樣被強烈引用。

+0

這就是我正在尋找的答案。謝謝! –