Dlaczego istnieje WeakHashMap, ale brak WeakSet?

Z J. Bloch

A ... źródłem wycieków pamięci jest słuchacze ... Najlepszym sposobem zapewnienia, że wywołania są zbierane śmieci szybko jest przechowywać tylko słabe odniesienia do nich, na przykład przez przechowywanie ich tylko jako kluczy w WeakHashMap .

Dlaczego więc w Java Collections framework nie ma żadnego Weaksetu?

Author: Basil Bourque, 2010-10-31

4 answers

To proste: istnieją przypadki użycia dla WeakHashMap (w szczególności przypadek, w którym chcesz przypisać obiekty z dodatkowymi właściwościami), ale nie ma przypadków użycia dla WeakSets.

 -62
Author: Martin v. Löwis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-18 10:17:41
Set<Object> weakHashSet = Collections.newSetFromMap(
        new WeakHashMap<Object, Boolean>());

Jak widać w Collections.newSetFromMap dokumentacja, zdając WeakHashMap aby uzyskać Set.

 170
Author: mart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-24 22:36:04

Dlaczego w java collection framework nie ma słabego zestawu?

Jedyną poprawną odpowiedzią na to jest to, że nie możemy ci powiedzieć dlaczego, ponieważ nie jesteśmy ludźmi, którzy podjęli decyzje projektowe. Tylkoprojektanci Javy wiedzą, dlaczego podjęli decyzję1.


Chociaż mogą być ograniczone przypadki użycia WeakHashSet, częścią filozofii projektowania biblioteki klas Java było unikanie wypełniania bibliotek klas klas klasami użyteczności dla wszystkich możliwe przypadki użycia.

Istnieje wiele innych bibliotek klas, które obejmują typy kolekcji; Apache Commons Collections i Google Collections (aka Guava) są dobrymi przykładami. Jednak WeakHashSet nawet nie" zrobił cięcia " dla bibliotek Apache i Google.

I oczywiście możesz użyć Collections.newSetFromMap do zawinięcia instancji WeakHashMap.


1 - dyskusja na temat prawidłowości tej decyzji nie jest możliwa dla StackOverflow. To jest strona z pytaniami, a nie dyskusja forum.

 14
Author: Stephen C,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-24 23:25:53

Podczas gdy można rzeczywiście użyć Collections.newSetFromMap() aby uzyskać słaby zestaw, jego przypadki użycia są w rzeczywistości dość ograniczone.

Jeśli chcesz zaimplementować coś takiego jak String.intern(), możesz rzucić okiem na Guava ' s Interners.newWeakInterner() zamiast tego funkcjonalność.

 0
Author: Axel Dörfler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-02 14:00:05