Ответ 1
Это просто: есть варианты использования для WeakHashMap
(в частности, в случае, когда вы хотите комментировать объекты с дополнительными свойствами), но для WeakSets нет использования.
Из J. Блох
A... источником утечек памяти является слушателей... Лучший способ обеспечить, чтобы обратные вызовы - сбор мусора оперативно хранить только слабые ссылки на них, например, сохраняя их только как ключи в WeakHashMap.
Итак, почему в Java Структура коллекций отсутствует
Это просто: есть варианты использования для WeakHashMap
(в частности, в случае, когда вы хотите комментировать объекты с дополнительными свойствами), но для WeakSets нет использования.
Set<Object> weakHashSet = Collections.newSetFromMap(
new WeakHashMap<Object, Boolean>());
Итак, почему в структуре java-коллекции нет никакого WeakSet?
Хотя для WeakHashSet
могут быть ограниченные варианты использования, часть философии дизайна библиотеки классов Java заключалась в том, чтобы избежать заполнения библиотек классов служебными классами для всех возможных вариантов использования.
Существует множество других библиотек классов, которые включают типы коллекций; Хорошими примерами являются коллекции Apache Commons и Google Collections (aka Guava). Однако WeakHashSet
даже не "сделал разрез" для библиотек Apache и Google.