¿Cómo actualizar un valor, dada una clave en un mapa hash?

Resuelto laertis asked hace 14 años • 17 respuestas

Supongamos que tenemos un HashMap<String, Integer>en Java.

¿Cómo actualizo (incremento) el valor entero de la clave de cadena para cada existencia de la cadena que encuentro?

Se podría quitar y volver a ingresar el par, pero los gastos generales serían una preocupación.
Otra forma sería simplemente colocar el par nuevo y reemplazar el anterior.

En el último caso, ¿qué sucede si hay una colisión de código hash con una nueva clave que estoy intentando insertar? El comportamiento correcto para una tabla hash sería asignarle un lugar diferente o hacer una lista a partir de ella en el depósito actual.

laertis avatar Nov 12 '10 01:11 laertis
Aceptado
map.put(key, map.get(key) + 1);

debería estar bien. Actualizará el valor de la asignación existente. Tenga en cuenta que esto utiliza el boxeo automático. Con la ayuda de map.get(key)obtenemos el valor de la clave correspondiente, luego puede actualizar según sus requisitos. Aquí estoy actualizando para incrementar el valor en 1.

Matthew Flaschen avatar Nov 11 '2010 18:11 Matthew Flaschen

Java 8 vías:

Puede utilizar computeIfPresentel método y proporcionarle una función de mapeo, que se llamará para calcular un nuevo valor basado en uno existente.

Por ejemplo,

Map<String, Integer> words = new HashMap<>();
words.put("hello", 3);
words.put("world", 4);
words.computeIfPresent("hello", (k, v) -> v + 1);
System.out.println(words.get("hello"));

Alternativamente, puede usar mergeel método, donde 1 es el valor predeterminado y la función incrementa el valor existente en 1:

words.merge("hello", 1, Integer::sum);

Además, existen muchos otros métodos útiles, como putIfAbsent, getOrDefault, forEach, etc.

Konstantin Milyutin avatar Sep 11 '2014 09:09 Konstantin Milyutin

La forma simplificada de Java 8 :

map.put(key, map.getOrDefault(key, 0) + 1);

Esto utiliza el método de HashMap que recupera el valor de una clave, pero si la clave no se puede recuperar, devuelve el valor predeterminado especificado (en este caso, un '0').

Esto es compatible con el núcleo de Java: HashMap<K,V> getOrDefault(Clave de objeto, V defaultValue)

Christopher Bull avatar Jun 08 '2016 14:06 Christopher Bull