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.

War es hilfreich?

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;
    ...
}
scroll top