C # Flüchtling sucht ein wenig Java Sammlungen Hilfe
-
06-07-2019 - |
Frage
muss ich in irgendeiner Art von Sammlung Schlüssel / Wert-Informationen speichern. In C #, ein Wörterbuch wie folgt definieren würde:
var entries = new Dictionary<string, int>();
entries.Add("Stop me", 11);
entries.Add("Feed me", 12);
entries.Add("Walk me", 13);
Dann würde ich die Werte zugreifen so:
int value = entries["Stop me"];
Wie kann ich das in Java? Ich habe Beispiele mit ArrayList
gesehen, aber ich würde die Lösung mit Generika, wenn möglich, gerne.
Lösung
Sie möchten einen Map
verwenden
Map<String, Integer> m = new HashMap<String, Integer>();
m.put("Stop me", 11);
Integer i = m.get("Stop me"); // i == 11
Beachten Sie, dass in der letzten Zeile, ich hätte sagen können:
int i = m.get("Stop me");
Welche ist eine Abkürzung für (mit Java Auto-Unboxing):
int i = m.get("Stop me").intValue()
Wenn kein Wert in der Karte bei dem gegebenen Schlüssel ist, get
die null
zurückkehrt und dieser Ausdruck wirft eine NullPointerException
. Daher ist es immer eine gute Idee, die boxed Typ Integer
in diesem Fall
Andere Tipps
Verwenden Sie einen java.util.Map
. Es gibt mehrere Implementierungen:
-
HashMap
: O (1) Lookup, behält nicht die Reihenfolge der Tasten -
TreeMap
: O (log n) Lookup, unterhält der Reihenfolge der Schlüssel, so dass Sie über sie in einer garantierten Ordnung laufen kann -
LinkedHashMap
:. O (1) Lookup, iteriert über Tasten in der Reihenfolge, wie sie auf der Karte hinzugefügt wurden
Sie nutzen sie, wie:
Map<String,Integer> map = new HashMap<String,Integer>();
map.put("Stop me", 11);
map.put("Feed me", 12);
int value = map.get("Stop me");
Für zusätzlichen Komfort mit Sammlungen arbeiten, haben einen Blick auf die Google Sammlungen Bibliothek . Es ist ausgezeichnet.
Sie verwenden ein Map
Java.
Beachten Sie, dass Sie nicht int
(oder einen anderen primitiven Typ) als generische Typparameter verwenden können, aber wegen der Autoboxing, es verhält sich immer noch fast , als ob es ein Map<String, int>
anstelle eines Map<String, Integer>
waren . (Sie wollen nicht viel Autoboxing in erfolgskritischen Code zu tun, wenn.)
Map<String, Integer> entries = new HashMap<String, Integer>();
entries.put("Stop me", 11);
entries.put("Feed me", 12);
entries.put("Walk me", 13);
int value = entries.get("Stop me"); // if you know it exists
// If you're not sure whether the map contains a value, it's better to do:
Integer boxedValue = entries.get("Punch me");
if (boxedValue != null) {
int unboxedValue = boxedValue;
...
}
Sie wollen auf jeden Fall eine HashMap
, die die Java-Version von C # Dictionary
ist.