Установить эквивалент WeakHashMap?

Является HashSet<WeakReference<T>> Set эквивалент WeakHashMap<T>? То есть будут ли записи автоматически удаляться, когда на них больше нет ссылок?

Если нет, то какой эквивалент?

1 ответ

Решение

Нет, если объект, на который ссылается один из WeakReferences в наборе получает мусор, WeakReference все еще будет включен в набор и не будет удален автоматически, но их referent будет null, WeakHashMap использует дополнительный код для удаления ключей со слабыми ссылками из карты, когда они собирают мусор.

Установить эквивалент WeakHashMap является:

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

Как HashSet также использует HashMap внутренне.

Кстати: A WeakReference это просто объект, указывающий на объект, который может собираться мусором, несмотря на ссылку, хранящуюся в WeakReference, WeakReference сам по себе не будет собирать мусор, пока на него больше не будут ссылаться, как и на все другие объекты.

Другие вопросы по тегам