CodeGym /Java блог /Случаен /Как да актуализирате стойността на съществуващ ключ в Has...
John Squirrels
Ниво
San Francisco

Как да актуализирате стойността на съществуващ ключ в HashMap

Публикувано в групата
Знаете, че винаги има ключ и стойност в HashMap or всяка друга карта . Ключът се нарича ключ с причина, защото получавате достъп до стойности чрез ключа. Ключът е уникален, но стойността не е. Така че не можете да получите ключ по стойност, защото стойностите могат да бъдат дублирани. В тази статия ще разберем How да актуализираме стойността на съществуващ ключ в HashMap в Java. Нека си припомним синтаксиса на Java. HashMap в Java се декларира по следния начин:

 HashMap<Key, Value> name
Да вземем пример. Да кажем, че имаме четирима приятели и специално за тях създадохме и попълнихме HashMap с техните имена. Техните ключове са цели числа.

Map<Integer, String> names = new HashMap<Integer, String>();
       names.put(1, "Stan");
       names.put(2, "Kyle");
       names.put(3, "Kenny");
       names.put(4, "Cartman");
Забележка: можете да създавате и попълвате своята карта по различни начини. Например с помощта на блока за инициализация. Ето го:

Map<Integer, String> names = new HashMap<Integer, String>() {
           {
               put(1, "Stan");
               put(2, "Kyle");
               put(3, "Kenny");
               put(4, "Cartman");
           }
       };
Или използване на метод и HashMap конструктор с другия аргумент на картата . Този метод е наличен от version 9 и по-нова.

Map<Integer, String> names = new HashMap<>(Map.of(1, "Stan", 2, "Kyle", 3, "Kenny", 4, "Cartman"));
Както казахме преди, в нашия HashMap ключовете са цели числа, а стойностите съдържат някои низове, в нашия случай имена на знаци. Е, да кажем, че нещо лошо се е случило с Кени (тези читатели, които познават анимационния сериал „Южен парк“, знаят със сигурност, че нещо лошо се е случвало на Кени доста често). Така че, когато това се случи, трябва да премахнем Кени от тази компания (нашата HashMap ) и да го заменим с друг приятел, да речем, на име Бътърс. Това е много лесно да се направи, защото е операция за актуализиране на стойност. Нашето момче Кени има ключ == 3 . Трябва да променим стойността за ключ 3, където се намира Кени. Можем да използваме метода put(), за да направим това:

names.put(3, "Butters");
В този случай, ако покажем нашата карта на екрана, резултатът ще бъде Howто следва:

{1=Stan, 2=Kyle, 3=Butters, 4=Cartman}
Ами ако всичко е наред с Кени и искаме да го задържим в компанията, но имаме причина да актуализираме ключа му? Да речем, той вече не е номер три, а номер пет. Нека просто поставим Кени отново в нашата карта с ключ 5 и да отпечатаме резултата. Можем да използваме метода put добре. Ето пълния code за този пример:

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);
   }
}
Вероятно вече се досещате Howъв ще бъде резултатът:

{1=Stan, 2=Kyle, 3=Kenny, 4=Cartman, 5=Kenny}
Това ли се очакваше от нас? Сега Kenny има два ключа в нашата HashMap . Е, строго погледнато, това са два различни Кени, Howвото и да имаме предвид, тъй като нашият обект е уникално определен от ключа. Това е като паспорт на човек, трябва да е уникален. Така че не можете просто да преименувате or актуализирате ключа на hashmap, след като бъде добавен директно. Тази операция просто не е налична. Можете обаче да направите измамна маневра: вмъкнете нов запис с новия ключ и изтрийте стария. Това може да стане с помощта на метода за премахване на HashMap . remove() не само премахва асоциацията, но и връща изтритата стойност (ако е била там преди). Нека допълним нашия пример с тази операция:

//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);
   }
}
Сега най-накрая получихме това, от което се нуждаехме, актуализирахме ключа, чрез който можем да намерим Кени. Ето резултата:
Кени {1=Стан, 2=Кайл, 4=Картман, 5=Кени}
Разбира се, можем да извършим операциите по премахване на „стария“ Кени и добавяне на нов в произволен ред. По същество те са независими. Или съкратете codeа си, като използвате само един ред:

names.put(5, names.remove(3));
Резултатът със сигурност ще е същият. Така че единственият правилен начин за промяна на ключ в Java HashMap е да изтриете записа и да вмъкнете същата стойност с нов ключ. Можете да го направите по различен начин, но това ще бъде почти същата история за добавяне и премахване на елемент.
Коментари
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION