2009-06-30 7 views
62

Me enfrenta un problema que parece no tener una solución directa.Actualizar una entrada de mapa java

Estoy usando java.util.Map, y quiero actualizar el valor en un par de clave-valor.

En este momento, lo estoy haciendo este lik:

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

Entonces, ¿hay algún método para que pueda obtener el Entry objeto deseado sin tener que recorrer todo el Map? ¿O hay alguna forma de actualizar el valor de la entrada en su lugar? Algún método en Map como setValue(String key, int val)?

JRH

+0

PD: su table.entrySet(). Lo escribí mal aquí. – jrharshath

+0

Puede eliminar la primera instrucción "if". Todavía causa una iteración completa a través del mapa si la clave no está presente. Si lo elimina, seguirá iterando por todo el mapa y no ejecutará nada si la clave no está presente. En este momento, si la clave está presente, recorre el mapa, encuentra que está presente y luego repite las entradas nuevamente. –

Respuesta

136

¿Qué pasa con sólo

table.put(key, val); 

?

+3

la clave ya existe. ¿Causará un problema? – jrharshath

+42

No, se sobrescribirá el valor anterior para esa clave. – skaffman

+2

oh, genial. Desearía que esto se dijera en algún lugar de los documentos. Tal vez no leí correctamente. – jrharshath

5

sólo tiene que utilizar el method

public Object put(Object key, Object value) 

si la clave ya estaba presente en el mapa a continuación, se devuelve el valor anterior.

11

Si la clave está presente, table.put(key, val) simplemente sobrescribirá el valor, de lo contrario creará una nueva entrada. ¡Maricón! y has terminado. :)

se puede obtener el valor de un mapa utilizando la clave es table.get(key); Eso es todo

Cuestiones relacionadas