Установить эквивалент WeakHashMap?
Является HashSet<WeakReference<T>>
Set
эквивалент WeakHashMap<T>
? То есть будут ли записи автоматически удаляться, когда на них больше нет ссылок?
Если нет, то какой эквивалент?
1 ответ
Нет, если объект, на который ссылается один из WeakReference
s в наборе получает мусор, WeakReference
все еще будет включен в набор и не будет удален автоматически, но их referent
будет null
, WeakHashMap
использует дополнительный код для удаления ключей со слабыми ссылками из карты, когда они собирают мусор.
Установить эквивалент WeakHashMap
является:
Set<T> set = Collections.newSetFromMap(new WeakHashMap<T, Boolean>());
Как HashSet
также использует HashMap
внутренне.
Кстати: A WeakReference
это просто объект, указывающий на объект, который может собираться мусором, несмотря на ссылку, хранящуюся в WeakReference
, WeakReference
сам по себе не будет собирать мусор, пока на него больше не будут ссылаться, как и на все другие объекты.