Ich verstehe nicht, warum Sie Java Collections SingletonMap benötigen würden ? Ist es in Multithread-Anwendungen nützlich?
java
collections
map
user710818
quelle
quelle
SingletonMap
also habe ich es bearbeitet. Ich habe seitdem meine Änderungen zurückgesetzt;)Antworten:
Grundsätzlich können Sie dies tun:
lieber als das:
Map<KeyType, ValueType> m = new HashMap<KeyType, ValueType>(); m.put(key, value); callAPIThatTakesAMap(m);
Das ist viel schöner, wenn Sie nur ein einziges Schlüssel / Wert-Paar haben. Diese Situation entsteht wahrscheinlich nicht sehr oft, aber
singleton()
undsingletonList()
recht häufig nützlich sein kann.quelle
Es ist nützlich, wenn Sie eine Karte an einen allgemeinen Code übergeben müssen (als Parameter oder als Ergebnis einer Methode) und dies in diesem speziellen Fall wissen - aber möglicherweise nicht in anderen Fällen, in denen die Karte an denselben allgemeinen Code übergeben wird Code - Die Karte, die Sie übergeben möchten, hat nur einen einzigen Schlüssel. In diesem Fall ist die SingletonMap effizienter als eine vollständige Kartenimplementierung und auch für den Programmierer bequemer, da alles, was Sie zu sagen haben, im Konstruktor gesagt werden kann.
quelle
Außerdem hat eine von Collections.singletonMap () zurückgegebene SingletonMap-Implementierung einen geringeren Speicherbedarf als eine reguläre HashMap. Es muss nur zwei Mitgliedsfelder enthalten: den Schlüssel und den Wert, während eine HashMap ein internes Array von Knotenobjekten sowie andere Mitgliedsfelder verwaltet. Wenn Sie also viele dieser Karten im Speicher erstellen, ist es ratsam, Collections.singletonMap () zu verwenden.
quelle
Es dient hauptsächlich der Bequemlichkeit und Abstraktion. Einige APIs nehmen ein
Collection
als Argument und es ist schön, eine einfache Möglichkeit zu haben, Objekte in einSet
oder zu konvertierenMap
.singletonMap()
undsingletonList()
wurden tatsächlich nachsingletonSet()
in Java 1.3 eingeführt, weil essingletonSet()
sich als nützlich erwiesen hat.quelle
Viele Antworten sagten Ihnen wann, aber ich möchte darauf hinweisen, wann
not use it
benutze es nicht, wenn du willst
put items later on
,weil setzen Implementierung von
singletonMap
wird werfenUnsupportedOperationException
quelle
Dies ist nur ein weiteres Beispiel, aber ich habe diese Codezeile geschrieben:
@Override public Map<Action, Promise<Boolean>> actOnResults() throws Exception { return Collections.singletonMap(Action.UPDATE_DATABASE, saver.save(results)); }
Beachten Sie die
@Override
. Die Schnittstelle kann allgemein Karten von vielen Dingen aufnehmen; Diese spezielle Instanziierung gibt nur immer eine Karte zurück, die eine Sache enthält. Beachten Sie auch, dass der Schlüssel zur Karte eine Aufzählung ist. Die Karten sollten also niemals groß sein, sondern nur die Ergebnisse der angegebenen Aktionen enthalten. In meinem realen Beispiel gibt es bis zu 5 Aktionen, und diese Instanziierung verwendet nur eine davon.Vollständig zu sein
EnumSet
oderEnumMap
ist in diesen Fällen oft angebracht, aber diese sind im Vergleich zum obigen Code immer noch ärgerlich ausführlich.quelle