2009-06-30 15 views
62

Je suis confronté à un problème qui semble ne pas avoir de solution directe. J'utilise java.util.Map, et je veux mettre à jour la valeur dans une paire valeur-clé.Mise à jour d'une entrée de carte Java

En ce moment, je fais lik ceci:

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

Ainsi est-il une méthode pour que je puisse obtenir l'objet Entry nécessaire sans avoir à parcourir l'ensemble Map? Ou existe-t-il un moyen de mettre à jour la valeur de l'entrée? Une méthode dans Map comme setValue(String key, int val)?

HJR

+0

PS: son table.entrySet(). Je l'ai tapé mal ici. – jrharshath

+0

Vous pouvez supprimer la première instruction "if". Il provoque toujours une itération complète à travers la carte si la clé n'est pas présente. Si vous le supprimez, vous continuerez à parcourir toute la carte sans exécuter quoi que ce soit si la clé n'est pas présente. En ce moment, si la clé est présente, vous parcourez la carte, trouvez qu'elle est présente, puis parcourez à nouveau les entrées. –

Répondre

136

Quel est le problème avec juste

table.put(key, val); 

?

+3

la clé existe déjà. Est-ce qu'il y aura un problème? – jrharshath

+42

Non, l'ancienne valeur de cette clé sera remplacée. – skaffman

+2

oh, cool. Je souhaite que cela a été dit quelque part dans les docs. Peut-être que je n'ai pas bien lu. – jrharshath

5

Vous utilisez simplement le method

public Object put(Object key, Object value) 

si la clé était déjà présent dans la carte la valeur précédente est renvoyée.

11

Si la clé est présente, table.put(key, val) remplacera simplement la valeur sinon elle créera une nouvelle entrée. Poof! et vous avez terminé. :)

vous pouvez obtenir la valeur d'une carte en utilisant la clé est table.get(key); C'est à ce sujet