Nie rozumiem, dlaczego potrzebujesz kolekcji java singletonMap ? Czy jest przydatny w aplikacjach wielowątkowych?
java
collections
map
user710818
źródło
źródło
SingletonMap
więc go zredagowałem. Od tego czasuOdpowiedzi:
Zasadniczo pozwala to zrobić:
zamiast tego:
Map<KeyType, ValueType> m = new HashMap<KeyType, ValueType>(); m.put(key, value); callAPIThatTakesAMap(m);
co jest o wiele przyjemniejsze, gdy masz tylko jedną parę klucz / wartość. Taka sytuacja prawdopodobnie nie występuje zbyt często, ale
singleton()
isingletonList()
często może być przydatna.źródło
Jest to przydatne, jeśli chcesz przekazać mapę do jakiegoś ogólnego kodu (jako parametr lub w wyniku metody) i wiesz, że w tym konkretnym przypadku - ale być może nie w innych przypadkach, które przekazują mapę do tego samego ogólnego kod - mapa, którą chcesz przekazać ma tylko jeden klucz. W takim przypadku SingletonMap jest bardziej wydajna niż pełna implementacja mapy, a także wygodniejsza dla programisty, ponieważ wszystko, co musisz powiedzieć, można powiedzieć w konstruktorze.
źródło
Ponadto implementacja SingletonMap zwracana przez Collections.singletonMap () zajmuje mniej miejsca w pamięci niż zwykła mapa HashMap. Musi zawierać tylko dwa pola składowe: klucz i wartość, podczas gdy HashMap utrzymuje wewnętrzną tablicę obiektów Node oraz innych pól członkowskich. Jeśli więc tworzysz wiele takich map w pamięci, rozsądnym wyborem byłoby użycie Collections.singletonMap ().
źródło
To głównie dla wygody i abstrakcji. Niektóre interfejsy API przyjmują
Collection
jako argument i dobrze jest mieć prosty sposób konwersji obiektów do formatuSet
lubMap
.singletonMap()
isingletonList()
faktycznie zostały wprowadzone późniejsingletonSet()
w Javie 1.3, ponieważsingletonSet()
okazały się przydatne.źródło
wiele odpowiedzi mówiło, kiedy, ale ja chcę wskazać, kiedy
not use it
nie używaj go, jeśli chcesz
put items later on
,bo umieść implementację
singletonMap
woli rzucaćUnsupportedOperationException
źródło
To tylko kolejny przykład, ale napisałem ten wiersz kodu:
@Override public Map<Action, Promise<Boolean>> actOnResults() throws Exception { return Collections.singletonMap(Action.UPDATE_DATABASE, saver.save(results)); }
zwróć uwagę na
@Override
. Interfejs bardziej ogólnie może przyjmować mapy wielu rzeczy; ta konkretna instancja po prostu zawsze zwraca mapę zawierającą jedną rzecz. Zauważ również, że kluczem do mapy jest Enum. Więc mapy nigdy nie powinny być duże, powinny po prostu zawierać wyniki dowolnych działań. W moim prawdziwym przykładzie jest do 5 akcji, a ta instancja używa tylko jednej z nich.Aby być kompletnym,
EnumSet
lubEnumMap
często jest to właściwe w takich przypadkach, ale są one nadal irytująco gadatliwe w porównaniu z powyższym kodem.źródło