Als Warnung lesen Sie bitte den Thread Efficiency of Java „Double Brace Initialization“ für die Auswirkungen auf die Leistung, die dies haben könnte.
@ user387184 Ja, sie nennen es “Doppelklammer-Initialisierer”. Siehe dieses Thema: stackoverflow.com/questions/924285/…
– Eng.Fouad
24. November 2011 um 18:39 Uhr
Sie sollten diese Methode nicht verwenden. Es erstellt für jedes Mal, wenn Sie es verwenden, eine neue Klasse viel schlechtere Leistung als das einfache Erstellen einer Karte. Siehe stackoverflow.com/questions/924285/…
– Timo Türschmann
26. April 2016 um 13:59 Uhr
Der Grund, warum ich dies abgelehnt habe, ist, dass es nicht erklärt hat, dass dies für jedes Mal, wenn Sie es verwenden, eine neue Klasse erstellt. Ich denke, dass die Leute sich der Kompromisse bewusst sein sollten, wenn sie es auf diese Weise tun.
– idungotnosn
8. November 2016 um 16:28 Uhr
@TimoTürschmann Scheint, wenn ich jemals eine statische Initialisierung einer Karte wie dieser benötigen würde, wäre sie auch statisch, wodurch das eliminiert würde jedes Mal, wenn Sie es verwenden Leistungsstrafe – Sie hätten diese Strafe einmal. Ich sehe keine andere Zeit, in der man diese Art der Initialisierung wünschen würde ohne die Variable ist statisch (würde das zB jemals jemand in einer Schleife verwenden?). Ich kann mich aber irren, Programmierer sind erfinderisch.
– Chris Cirefice
27. November 2016 um 23:41 Uhr
Bitte verwenden Sie dieses Anti-Pattern nicht, es ist aktiv gefährlich und es gibt sinnvolle alternativen.
– dimo414
3. April 2018 um 20:59 Uhr
Timo Türschmann
Seit Java 9 ist die Nutzung möglich Map.of(...)so:
Diese Karte ist unveränderlich. Wenn Sie möchten, dass die Karte veränderbar ist, müssen Sie Folgendes hinzufügen:
Map<String, Integer> hashMap = new HashMap<>(immutableMap);
Wenn Sie Java 9 nicht verwenden können, müssen Sie selbst eine ähnliche Hilfsmethode schreiben oder eine Bibliothek eines Drittanbieters (z Guave), um diese Funktionalität für Sie hinzuzufügen.
Nach dem Hinzufügen von 10 Einträgen wird ein seltsamer Fehler “Methode kann nicht aufgelöst werden” ausgegeben. Liegt dieser Fehler bei dieser Methode vor?
– vikramvi
2. April 2020 um 7:56 Uhr
@vikramvi ja Wenn man sich das anschaut DokumentationMap.of wird nur bis zu 10 Einträgen gemacht, da es recht mühsam ist
– fröhlicher
18. Juni 2020 um 14:45 Uhr
JimmyT
Sie können die ImmutableMap von Google Guava verwenden. Dies funktioniert, solange Sie sich nicht darum kümmern, die Karte später zu ändern (Sie können .put() nicht auf der Karte aufrufen, nachdem Sie sie mit dieser Methode erstellt haben):
import com.google.common.collect.ImmutableMap;
// For up to five entries, use .of()
Map<String, Integer> littleMap = ImmutableMap.of(
"One", Integer.valueOf(1),
"Two", Integer.valueOf(2),
"Three", Integer.valueOf(3)
);
// For more than five entries, use .builder()
Map<String, Integer> bigMap = ImmutableMap.<String, Integer>builder()
.put("One", Integer.valueOf(1))
.put("Two", Integer.valueOf(2))
.put("Three", Integer.valueOf(3))
.put("Four", Integer.valueOf(4))
.put("Five", Integer.valueOf(5))
.put("Six", Integer.valueOf(6))
.build();
Eine etwas verwandte Frage: ImmutableMap.of() Workaround für HashMap in Maps?
Guava ist riesig, ich würde es nicht für meine Android-App verwenden, es sei denn, es ist absolut notwendig
– Ericn
3. Mai 2017 um 7:29 Uhr
Hüten Sie sich davor ImmutableMap akzeptiert nicht null Schlüssel oder Werte.
– Wadzim
5. Mai 2017 um 17:58 Uhr
@Erikn ProGuard können Sie alle Teile einer Bibliothek ausschließen, die Sie nicht verwenden.
– dimo414
3. April 2018 um 21:04 Uhr
Sadiq Ali
Zu Maps wurden in Java 9 auch Factory-Methoden hinzugefügt. Für bis zu 10 Einträge haben Maps überladene Konstruktoren, die Paare von Schlüsseln und Werten annehmen. Zum Beispiel könnten wir eine Karte verschiedener Städte und ihrer Bevölkerung (laut Google im Oktober 2016) wie folgt erstellen:
Der var-args-Fall für Map ist etwas schwieriger, Sie müssen sowohl Schlüssel als auch Werte haben, aber in Java können Methoden nicht zwei var-args-Parameter haben. Der allgemeine Fall wird also behandelt, indem eine var-args-Methode von verwendet wird Map.Entry<K, V> Objekte und Hinzufügen einer statischen entry() Methode, die sie konstruiert. Zum Beispiel:
boolean x;
for (x = false,
map.put("One", new Integer(1)),
map.put("Two", new Integer(2)),
map.put("Three", new Integer(3)); x;);
Ignorieren der Deklaration von x (was notwendig ist, um eine “unreachable statement”-Diagnose zu vermeiden), technisch gesehen ist es nur eine Anweisung.
Das ist ekelhaft hackig.
– Micha Treppe
3. Oktober 2016 um 12:35 Uhr
@MicahStairs – Aber es ist nur eine Aussage.
– Heiße Licks
3. Oktober 2016 um 12:36 Uhr
Stimmt, aber das ist die Art von Code, über die ich in der Produktion nie stolpern würde.
– Micha Treppe
3. Oktober 2016 um 12:39 Uhr
@MicahStairs – Ich habe Schlimmeres gesehen.
– Heiße Licks
3. Oktober 2016 um 13:13 Uhr
Omg, ich habe heute danach gesucht, wie funktioniert dieser Code? Ich habe es zum Testen in den Code eingefügt, aber ich kann nicht herausfinden, wie es intern funktioniert … 🙂
– GOXR3PLUS
19. Oktober 2016 um 9:50 Uhr
13449400cookie-checkgleichzeitiges Hinzufügen mehrerer Einträge zu einer HashMap in einer Anweisungyes