CodeGym /Blog Java /Random-ES /Cómo actualizar el valor de una clave existente en HashMa...
Autor
John Selawsky
Senior Java Developer and Tutor at LearningTree

Cómo actualizar el valor de una clave existente en HashMap

Publicado en el grupo Random-ES
Sabes que siempre hay una clave y un valor en HashMap o cualquier otro Mapa . La clave se llama clave por una razón porque obtiene acceso a los valores mediante la clave. La clave es única, pero el valor no lo es. Por lo tanto, no puede obtener una clave por valor porque los valores se pueden duplicar. En este artículo, vamos a descubrir cómo actualizar el valor de una clave existente en HashMap en Java. Recordemos la sintaxis de Java. HashMap en Java se declara de la siguiente manera:

 HashMap<Key, Value> name
Tomemos un ejemplo. Digamos, tenemos cuatro amigos y, especialmente para ellos, creamos y completamos un HashMap con sus nombres. Sus claves son números enteros.

Map<Integer, String> names = new HashMap<Integer, String>();
       names.put(1, "Stan");
       names.put(2, "Kyle");
       names.put(3, "Kenny");
       names.put(4, "Cartman");
Nota: puede crear y completar su Mapa de diferentes maneras. Por ejemplo, usando el bloque de inicialización. Aquí lo tienes:

Map<Integer, String> names = new HashMap<Integer, String>() {
           {
               put(1, "Stan");
               put(2, "Kyle");
               put(3, "Kenny");
               put(4, "Cartman");
           }
       };
O usando un método y un constructor HashMap con el otro argumento del mapa . Este método está disponible a partir de la versión 9 y posteriores.

Map<Integer, String> names = new HashMap<>(Map.of(1, "Stan", 2, "Kyle", 3, "Kenny", 4, "Cartman"));
Como dijimos antes, en nuestro HashMap las claves son números enteros, y los valores contienen algunas cadenas, en nuestro caso, nombres de personajes. Bueno, digamos que algo malo le pasó a Kenny (aquellos lectores que conocen la serie de dibujos animados de South Park, saben con certeza que algo malo le ha pasado a Kenny con bastante frecuencia). Entonces, cuando suceda, tenemos que eliminar a Kenny de esta empresa (nuestro HashMap ) y reemplazarlo con otro amigo, digamos, con el nombre de Butters. Esto es muy fácil de hacer porque es una operación de valor de actualización. Nuestro chico Kenny tiene una llave == 3 . Necesitamos cambiar el valor de la tecla 3, donde se encuentra Kenny. Podemos usar el método put() para hacer esto:

names.put(3, "Butters");
En este caso, si desplegamos nuestro mapa en pantalla, el resultado será el siguiente:

{1=Stan, 2=Kyle, 3=Butters, 4=Cartman}
¿Qué pasa si todo está bien con Kenny y queremos mantenerlo en la empresa, pero tenemos una razón para actualizar su clave? Digamos que ya no es el número tres, sino el número cinco. Pongamos a Kenny en nuestro mapa nuevamente con la tecla 5 e imprimamos el resultado. Podemos usar bien el método put . Aquí está el código completo para este ejemplo:

import java.util.HashMap;

public class HashMapUpdKey {
   public static void main(String[] args) {
       Map<Integer, String> names = new HashMap<>(Map.of(1, "Stan", 2, "Kyle", 3, "Kenny", 4, "Cartman"));
       names.put(5, "Kenny");
       System.out.println(names);
   }
}
Probablemente ya hayas adivinado cuál será el resultado:

{1=Stan, 2=Kyle, 3=Kenny, 4=Cartman, 5=Kenny}
¿Es esto lo que se esperaba de nosotros? Ahora Kenny tiene dos claves en nuestro HashMap . Bueno, estrictamente hablando, estos son dos Kennys diferentes, independientemente de lo que queramos decir, ya que nuestro objeto está determinado únicamente por la clave. Es como el pasaporte de una persona, debe ser único. Por lo tanto, no puede simplemente cambiar el nombre o actualizar la clave hashmap una vez agregada directamente. Esta operación simplemente no está disponible. Sin embargo, puede realizar una maniobra engañosa: inserte una nueva entrada con la nueva clave y elimine la anterior. Esto se puede hacer usando el método de eliminación de HashMap . remove() no solo elimina la asociación, sino que también devuelve el valor eliminado (si estaba allí antes). Complementemos nuestro ejemplo con esta operación:

//easy replacement example
import java.util.HashMap;

public class HashMapUpdKey {
   public static void main(String[] args) {
      Map<Integer, String> names = new HashMap<>(Map.of(1, "Stan", 2, "Kyle", 3, "Kenny", 4, "Cartman"));
           
       names.put(5, "Kenny"); //Adding “new” Kenny 
       System.out.println(names.remove(3)); //Update value of the key: Removing “old” Kenny and print out deleted value

       System.out.println(names);
   }
}
Ahora finalmente obtuvimos lo que necesitábamos, actualizamos la clave por la cual podemos encontrar a Kenny. Aquí está la salida:
Kenny {1=Stan, 2=Kyle, 4=Cartman, 5=Kenny}
Por supuesto, podemos realizar las operaciones de eliminar el Kenny "viejo" y agregar uno nuevo en cualquier orden. Son esencialmente independientes. O acorta tu código usando solo una línea:

names.put(5, names.remove(3));
El resultado será el mismo seguro. Entonces, la única forma adecuada de cambiar una clave en Java HashMap es eliminar la entrada e insertar el mismo valor con una nueva clave. Puede hacerlo de una manera diferente, pero será casi la misma historia sobre agregar y eliminar un elemento.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION