2009-06-30 19 views
62

Ich stehe vor einem Problem, das keine geradlinige Lösung zu haben scheint.Aktualisieren eines Java-Map-Eintrags

Ich verwende java.util.Map, und ich möchte den Wert in einem Schlüssel-Wert-Paar aktualisieren.

Gerade jetzt, ich bin es lik dies zu tun:

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; 
     } 
    } 
} 

So ist es eine Methode, so dass ich die erforderliche Entry Objekt bekommen kann, ohne durch die gesamte Map laufen zu müssen? Oder gibt es eine Möglichkeit, den Wert des Eintrags zu aktualisieren? Eine Methode in Map wie setValue(String key, int val)?

JRH

+0

PS ist: seine table.entrySet(). Ich habe es falsch eingegeben. – jrharshath

+0

Sie können die erste "if" -Anweisung entfernen. Wenn der Schlüssel nicht vorhanden ist, verursacht es weiterhin eine vollständige Iteration durch die Zuordnung. Wenn Sie es entfernen, durchlaufen Sie immer noch die gesamte Map und führen nichts aus, wenn der Schlüssel nicht vorhanden ist. Gerade jetzt, wenn der Schlüssel vorhanden ist, iterieren Sie durch die Karte, finden Sie, dass sie vorhanden ist, und durchlaufen Sie die Einträge erneut. –

Antwort

136

Was mit nur

table.put(key, val); 

falsch?

+3

Der Schlüssel ist bereits vorhanden. Wird es ein Problem geben? – jrharshath

+42

Nein, der alte Wert für diesen Schlüssel wird überschrieben. – skaffman

+2

oh, cool. Ich wünschte, das wäre irgendwo in den Dokumenten gesagt. Vielleicht habe ich nicht richtig gelesen. – jrharshath

5

Sie verwenden nur die method

public Object put(Object key, Object value) 

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

11

Wenn der Schlüssel vorhanden ist, überschreibt table.put(key, val) nur den Wert, sonst erstellt er einen neuen Eintrag. Puh! und du bist fertig. :)

können Sie den Wert von einer Karte erhalten, indem Schlüssel ist table.get(key);, was dagegen

Verwandte Themen