CodeGym /Blog Java /Random-PL /Jak zaktualizować wartość istniejącego klucza w HashMap
Autor
John Selawsky
Senior Java Developer and Tutor at LearningTree

Jak zaktualizować wartość istniejącego klucza w HashMap

Opublikowano w grupie Random-PL
Wiesz, że zawsze istnieje klucz i wartość w HashMap lub jakiejkolwiek innej Map . Klucz jest nazywany kluczem z jakiegoś powodu, ponieważ uzyskujesz dostęp do wartości za pomocą klucza. Klucz jest unikalny, ale wartość nie. Więc nie możesz uzyskać klucza według wartości, ponieważ wartości mogą być duplikowane. W tym artykule dowiemy się, jak zaktualizować wartość istniejącego klucza w HashMap w Javie. Przypomnijmy sobie składnię Javy. HashMap w Javie jest deklarowany w następujący sposób:

 HashMap<Key, Value> name
Weźmy przykład. Powiedzmy, że mamy czterech przyjaciół i specjalnie dla nich stworzyliśmy i wypełniliśmy HashMap ich imionami. Ich klucze to liczby całkowite.

Map<Integer, String> names = new HashMap<Integer, String>();
       names.put(1, "Stan");
       names.put(2, "Kyle");
       names.put(3, "Kenny");
       names.put(4, "Cartman");
Uwaga: Mapę można tworzyć i wypełniać na różne sposoby. Na przykład za pomocą bloku inicjalizacyjnego. tutaj:

Map<Integer, String> names = new HashMap<Integer, String>() {
           {
               put(1, "Stan");
               put(2, "Kyle");
               put(3, "Kenny");
               put(4, "Cartman");
           }
       };
Lub użycie metody i konstruktora HashMap z innym argumentem mapy . Ta metoda jest dostępna od wersji 9 i nowszych.

Map<Integer, String> names = new HashMap<>(Map.of(1, "Stan", 2, "Kyle", 3, "Kenny", 4, "Cartman"));
Jak powiedzieliśmy wcześniej, w naszych HashMapie klucze są liczbami całkowitymi, a wartości zawierają ciągi znaków, w naszym przypadku nazwy znaków. Cóż, powiedzmy, że Kenny'emu przydarzyło się coś złego (czytelnicy, którzy znają serial animowany South Park, wiedzą na pewno, że coś złego zdarzało się Kenny'emu dość często). Więc kiedy to się stanie, musimy usunąć Kenny'ego z tej firmy (naszej HashMap ) i zastąpić go innym przyjacielem, powiedzmy, o imieniu Butters. Jest to bardzo łatwe do wykonania, ponieważ jest to operacja aktualizacji wartości. Nasz chłopiec Kenny ma klucz == 3 . Musimy zmienić wartość klucza 3, w którym znajduje się Kenny. W tym celu możemy użyć metody put() :

names.put(3, "Butters");
W takim przypadku, jeśli wyświetlimy naszą mapę na ekranie, wynik będzie następujący:

{1=Stan, 2=Kyle, 3=Butters, 4=Cartman}
Co jeśli wszystko jest w porządku z Kennym i chcemy go zatrzymać w firmie, ale mamy powód, aby zaktualizować jego klucz? Powiedzmy, że nie jest już numerem trzy, ale numerem pięć. Po prostu ponownie umieśćmy Kenny'ego na naszej mapie za pomocą klawisza 5 i wydrukujmy wynik. Możemy dobrze wykorzystać metodę put . Oto pełny kod tego przykładu:

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);
   }
}
Pewnie już się domyślasz, jaki będzie wynik:

{1=Stan, 2=Kyle, 3=Kenny, 4=Cartman, 5=Kenny}
Czy tego od nas oczekiwano? Teraz Kenny ma dwa klucze w naszej HashMap . Cóż, ściśle mówiąc, to są dwaj różni Kenny, cokolwiek mamy na myśli, ponieważ nasz przedmiot jest jednoznacznie określony przez klucz. To jest jak paszport osoby, powinien być niepowtarzalny. Nie można więc po prostu zmienić nazwy ani zaktualizować klucza mapy skrótu po dodaniu go bezpośrednio. Ta operacja jest po prostu niedostępna. Można jednak wykonać oszukańczy manewr: wstawić nowy wpis z nowym kluczem i usunąć stary. Można to zrobić za pomocą metody usuwania HashMap . remove() nie tylko usuwa skojarzenie, ale także zwraca usuniętą wartość (jeśli była tam wcześniej). Uzupełnijmy nasz przykład o tę operację:

//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);
   }
}
Teraz w końcu dostaliśmy to, czego potrzebowaliśmy, zaktualizowaliśmy klucz, dzięki któremu możemy znaleźć Kenny'ego. Oto dane wyjściowe:
Kenny {1=Stan, 2=Kyle, 4=Cartman, 5=Kenny}
Oczywiście operacje usunięcia „starego” Kenny’ego i dodania nowego możemy przeprowadzić w dowolnej kolejności. Są zasadniczo niezależne. Lub skróć swój kod, używając tylko jednej linii:

names.put(5, names.remove(3));
Wynik na pewno będzie taki sam. Tak więc jedynym właściwym sposobem zmiany klucza w Javie HashMap jest usunięcie wpisu i wstawienie tej samej wartości z nowym kluczem. Możesz to zrobić w inny sposób, ale będzie to prawie ta sama historia o dodawaniu i usuwaniu elementu.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION