Aktualisieren eines Java-Karteneintrags

73

Ich stehe vor einem Problem, das keine direkte Lösung zu haben scheint.

Ich verwende java.util.Mapund möchte den Wert in einem Schlüssel-Wert-Paar aktualisieren.

Im Moment mache ich es so:

private Map<String,int> table = new HashMap<String,int>();
public void update(String key, int val) {
    if( !table.containsKey(key) ) return;
    Entry<String,int> entry;
    for( entry : table.entrySet() ) {
        if( entry.getKey().equals(key) ) {
            entry.setValue(val);
            break;
        }
    }
}

Gibt es also eine Methode, mit der ich das gewünschte EntryObjekt erhalten kann, ohne das gesamte Objekt durchlaufen zu müssen Map? Oder gibt es eine Möglichkeit, den Wert des Eintrags zu aktualisieren? Irgendeine Methode Mapwie setValue(String key, int val)?

jrh

jrharshath
quelle
PS: seine table.entrySet (). Ich habe es hier falsch geschrieben.
Jrharshath
Sie können die erste "if" -Anweisung entfernen. Es führt immer noch eine vollständige Iteration durch die Karte durch, wenn der Schlüssel nicht vorhanden ist. Wenn Sie es entfernen, durchlaufen Sie immer noch die gesamte Karte und führen nichts aus, wenn der Schlüssel nicht vorhanden ist. Wenn der Schlüssel jetzt vorhanden ist, durchlaufen Sie die Karte, stellen fest, dass er vorhanden ist, und durchlaufen dann die Einträge erneut.
Sandy Simonton

Antworten:

157

Verwenden

table.put(key, val);

um ein neues Schlüssel / Wert-Paar hinzuzufügen oder den Wert eines vorhandenen Schlüssels zu überschreiben.

Aus den Javadocs:

V put (K-Taste, V-Wert): Ordnet den angegebenen Wert dem angegebenen Schlüssel in dieser Zuordnung zu (optionale Operation). Wenn die Zuordnung zuvor eine Zuordnung für den Schlüssel enthielt, wird der alte Wert durch den angegebenen Wert ersetzt. (Eine Zuordnung m soll genau dann eine Zuordnung für einen Schlüssel k enthalten, wenn m.containsKey (k) true zurückgeben würde.)

Skaffman
quelle
Als Referenz gibt es in Java 8 eine putIfAbsent () -Methode für den Fall, dass jemand nicht aktualisieren wollte.
Arcturus
13

Wenn der Schlüssel vorhanden ist, table.put(key, val)wird nur der Wert überschrieben, andernfalls wird ein neuer Eintrag erstellt. Poof! und du bist fertig. :) :)

Sie können mit der Taste den Wert von einer Karte erhalten , ist table.get(key);das ist es

Priyank
quelle
6

Sie verwenden nur die Methode

public Object put(Object key, Object value)

Wenn der Schlüssel bereits in der Karte vorhanden war, wird der vorherige Wert zurückgegeben.

mkoeller
quelle