CodeGym /Blogue Java /Random-PT /Como atualizar o valor de uma chave existente no HashMap
John Squirrels
Nível 41
San Francisco

Como atualizar o valor de uma chave existente no HashMap

Publicado no grupo Random-PT
Você sabe que sempre há uma chave e um valor no HashMap ou em qualquer outro Map . A chave é chamada de chave por um motivo porque você obtém acesso aos valores pela chave. A chave é única, mas o valor não. Portanto, você não pode obter uma chave por valor porque os valores podem ser duplicados. Neste artigo, vamos descobrir como atualizar o valor de uma chave existente no HashMap em Java. Vamos nos lembrar da sintaxe Java. HashMap em Java é declarado da seguinte maneira:

 HashMap<Key, Value> name
Vamos dar um exemplo. Digamos, temos quatro amigos e especialmente para eles criamos e preenchemos um HashMap com seus nomes. Suas chaves são números inteiros.

Map<Integer, String> names = new HashMap<Integer, String>();
       names.put(1, "Stan");
       names.put(2, "Kyle");
       names.put(3, "Kenny");
       names.put(4, "Cartman");
Observação: você pode criar e preencher seu Mapa de diferentes maneiras. Por exemplo, usando o bloco de inicialização. Aqui está:

Map<Integer, String> names = new HashMap<Integer, String>() {
           {
               put(1, "Stan");
               put(2, "Kyle");
               put(3, "Kenny");
               put(4, "Cartman");
           }
       };
Ou usando um método e um construtor HashMap com o outro argumento de mapa . Este método está disponível a partir da versão 9 e posterior.

Map<Integer, String> names = new HashMap<>(Map.of(1, "Stan", 2, "Kyle", 3, "Kenny", 4, "Cartman"));
Como dissemos antes, em nosso HashMap as chaves são números inteiros, e os valores contêm algumas strings, no nosso caso, nomes de caracteres. Bem, digamos que algo ruim aconteceu com Kenny (aqueles leitores que conhecem a série de desenhos animados South Park sabem com certeza que algo ruim aconteceu com Kenny com bastante frequência). Então, quando isso acontecer, temos que remover Kenny desta empresa (nosso HashMap ) e substituí-lo por outro amigo, digamos, de nome Butters. Isso é muito fácil de fazer porque é uma operação de atualização de valor. Nosso garoto Kenny tem uma chave == 3 . Precisamos alterar o valor da chave 3, onde Kenny está localizado. Podemos usar o método put() para fazer isso:

names.put(3, "Butters");
Neste caso, se exibirmos nosso mapa na tela, o resultado será o seguinte:

{1=Stan, 2=Kyle, 3=Butters, 4=Cartman}
E se estiver tudo bem com Kenny e quisermos mantê-lo na empresa, mas tivermos um motivo para atualizar sua chave? Diga, ele não é mais o número três, mas o número cinco. Vamos apenas colocar Kenny em nosso mapa novamente com a tecla 5 e imprimir o resultado. Podemos usar bem o método put . Aqui está o código completo para este exemplo:

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);
   }
}
Você provavelmente já adivinhou qual será o resultado:

{1=Stan, 2=Kyle, 3=Kenny, 4=Cartman, 5=Kenny}
É para isso que esperávamos? Agora Kenny tem duas chaves em nosso HashMap . Bem, estritamente falando, esses são dois Kennys diferentes, seja lá o que queremos dizer, já que nosso objeto é determinado exclusivamente pela chave. É como o passaporte de uma pessoa, deve ser único. Portanto, você não pode simplesmente renomear ou atualizar a chave hashmap depois de adicionada diretamente. Esta operação simplesmente não está disponível. No entanto, você pode fazer uma manobra enganosa: insira uma nova entrada com a nova chave e exclua a antiga. Isso pode ser feito usando o método remove HashMap . remove() não apenas remove a associação, mas também retorna o valor excluído (se já existia antes). Vamos complementar nosso exemplo com esta operação:

//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);
   }
}
Agora finalmente conseguimos o que precisávamos, atualizamos a chave pela qual podemos encontrar Kenny. Aqui está a saída:
Kenny {1=Stan, 2=Kyle, 4=Cartman, 5=Kenny}
Claro, podemos realizar as operações de remover o “velho” Kenny e adicionar um novo em qualquer ordem. São essencialmente independentes. Ou encurte seu código usando apenas uma linha:

names.put(5, names.remove(3));
O resultado será o mesmo com certeza. Portanto, a única maneira adequada de alterar uma chave no Java HashMap é excluir a entrada e inserir o mesmo valor com uma nova chave. Você pode fazer isso de uma maneira diferente, mas será quase a mesma história sobre adicionar e remover um elemento.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION