CodeGym /Java blogg /Slumpmässig /Hur man uppdaterar värdet på en befintlig nyckel i HashMa...
John Squirrels
Nivå
San Francisco

Hur man uppdaterar värdet på en befintlig nyckel i HashMap

Publicerad i gruppen
Du vet att det alltid finns en nyckel och ett värde i HashMap eller någon annan karta . Nyckel kallas nyckel av en anledning eftersom du får tillgång till värden med nyckeln. Nyckeln är unik, men värdet är det inte. Så du kan inte få en nyckel efter värde eftersom värden kan dupliceras. I den här artikeln ska vi ta reda på hur du uppdaterar värdet på en befintlig nyckel i HashMap i Java. Låt oss komma ihåg Java-syntaxen. HashMap i Java deklareras på följande sätt:

 HashMap<Key, Value> name
Låt oss ta ett exempel. Säg att vi har fyra vänner och speciellt för dem skapade och fyllde vi i en HashMap med deras namn. Deras nycklar är heltal.

Map<Integer, String> names = new HashMap<Integer, String>();
       names.put(1, "Stan");
       names.put(2, "Kyle");
       names.put(3, "Kenny");
       names.put(4, "Cartman");
Obs! Du kan skapa och fylla i din karta på olika sätt. Till exempel genom att använda initieringsblocket. Här är det:

Map<Integer, String> names = new HashMap<Integer, String>() {
           {
               put(1, "Stan");
               put(2, "Kyle");
               put(3, "Kenny");
               put(4, "Cartman");
           }
       };
Eller att använda en metod och en HashMap-konstruktor med det andra kartargumentet . Denna metod är tillgänglig från version 9 och senare.

Map<Integer, String> names = new HashMap<>(Map.of(1, "Stan", 2, "Kyle", 3, "Kenny", 4, "Cartman"));
Som vi sa tidigare, i vår HashMap är nycklar heltal, och värdena innehåller några strängar, i vårt fall namn på tecken. Nåväl, låt oss säga att något dåligt hände Kenny (de läsare som känner till South Park tecknade serier, vet säkert att något dåligt har hänt Kenny ganska ofta). Så när det händer måste vi ta bort Kenny från det här företaget (vår HashMap ), och ersätta honom med en annan vän, säg, vid namn Butters. Detta är mycket enkelt att göra eftersom det är en uppdateringsvärdesoperation. Vår Kenny-pojke har en nyckel == 3 . Vi måste ändra värdet för nyckel 3, där Kenny finns. Vi kan använda put() -metoden för att göra detta:

names.put(3, "Butters");
I det här fallet, om vi visar vår karta på skärmen, blir resultatet som följer:

{1=Stan, 2=Kyle, 3=Butters, 4=Cartman}
Tänk om allt är bra med Kenny och vi vill behålla honom i företaget, men vi har en anledning att uppdatera hans nyckel? Säg, han är inte nummer tre längre, utan nummer fem. Låt oss bara lägga in Kenny i vår karta igen med knapp 5 och skriva ut resultatet. Vi kan använda putmetoden väl. Här är hela koden för detta exempel:

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);
   }
}
Du har förmodligen redan gissat vad resultatet kommer att bli:

{1=Stan, 2=Kyle, 3=Kenny, 4=Cartman, 5=Kenny}
Är det detta vi förväntades för? Nu har Kenny två nycklar i vår HashMap . Tja, strängt taget är det här två olika Kennys, vad vi än menar, eftersom vårt objekt bestäms unikt av nyckeln. Det är som en persons pass, det ska vara unikt. Så du kan inte bara byta namn på eller uppdatera hashmap-nyckeln när den har lagts till direkt. Denna operation är helt enkelt inte tillgänglig. Du kan dock göra en vilseledande manöver: infoga en ny post med den nya nyckeln och radera den gamla. Detta kan göras med hjälp av HashMap- borttagningsmetoden . remove() tar inte bara bort associationen utan returnerar också det raderade värdet (om det fanns där tidigare). Låt oss komplettera vårt exempel med denna operation:

//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);
   }
}
Nu fick vi äntligen det vi behövde, uppdaterade nyckeln som vi kan hitta Kenny med. Här är utgången:
Kenny {1=Stan, 2=Kyle, 4=Cartman, 5=Kenny}
Naturligtvis kan vi utföra operationerna med att ta bort den "gamla" Kenny och lägga till en ny i valfri ordning. De är i huvudsak oberoende. Eller förkorta din kod med endast en rad:

names.put(5, names.remove(3));
Resultatet blir säkert detsamma. Så det enda korrekta sättet att ändra en nyckel i Java HashMap är att ta bort posten och infoga samma värde med en ny nyckel. Du kan göra det på ett annat sätt men det blir nästan samma historia om att lägga till och ta bort ett element.
Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION