CodeGym /Java blog /Véletlen /Meglévő kulcs értékének frissítése a HashMapben
John Squirrels
Szint
San Francisco

Meglévő kulcs értékének frissítése a HashMapben

Megjelent a csoportban
Tudja, hogy mindig van kulcs és érték a HashMap- ben vagy bármely más térképben . A kulcsot valamiért kulcsnak nevezik, mert a kulccsal hozzáférhet az értékekhez. A kulcs egyedi, de az érték nem. Tehát nem kaphat kulcsot érték szerint, mert az értékek duplikálhatók. Ebben a cikkben megtudjuk, hogyan lehet frissíteni egy meglévő kulcs értékét a Java HashMap programban . Emlékezzünk a Java szintaxisra. A Java HashMap a következő módon van deklarálva:

 HashMap<Key, Value> name
Vegyünk egy példát. Tegyük fel, hogy van négy barátunk, és különösen nekik készítettünk és kitöltöttünk egy HashMap-et a nevükkel. A kulcsaik egész számok.

Map<Integer, String> names = new HashMap<Integer, String>();
       names.put(1, "Stan");
       names.put(2, "Kyle");
       names.put(3, "Kenny");
       names.put(4, "Cartman");
Megjegyzés: a térképet többféleképpen is létrehozhatja és kitöltheti . Például az inicializálási blokk használatával. Itt van:

Map<Integer, String> names = new HashMap<Integer, String>() {
           {
               put(1, "Stan");
               put(2, "Kyle");
               put(3, "Kenny");
               put(4, "Cartman");
           }
       };
Vagy egy metódus és egy HashMap konstruktor használata a másik leképezési argumentummal . Ez a módszer a 9-es és újabb verzióktól érhető el.

Map<Integer, String> names = new HashMap<>(Map.of(1, "Stan", 2, "Kyle", 3, "Kenny", 4, "Cartman"));
Ahogy korábban is mondtuk, a HashMap -ünkben a kulcsok egész számok, és az értékek tartalmaznak néhány karakterláncot, esetünkben karakterek neveit. Nos, tegyük fel, hogy valami rossz történt Kennyvel (azok az olvasók, akik ismerik a South Park rajzfilmsorozatot, biztosan tudják, hogy Kennyvel elég gyakran történt valami rossz). Tehát amikor ez megtörténik, el kell távolítanunk Kennyt ebből a cégből ( a HashMap- ünkből ), és helyettesítenünk kell egy másik baráttal, mondjuk Butters néven. Ez nagyon egyszerű, mert ez egy frissítési érték művelet. A mi Kenny fiúnknak kulcsa van == 3 . Módosítanunk kell a 3. kulcs értékét, ahol Kenny található. Ehhez használhatjuk a put() metódust:

names.put(3, "Butters");
Ebben az esetben, ha megjelenítjük térképünket a képernyőn, az eredmény a következő lesz:

{1=Stan, 2=Kyle, 3=Butters, 4=Cartman}
Mi van akkor, ha Kennyvel minden rendben van, és a társaságban akarjuk tartani, de van okunk frissíteni a kulcsát? Mondjuk, ő már nem a harmadik, hanem az ötödik. Tegyük újra Kennyt a térképünkre az 5-ös kulccsal, és nyomtassuk ki az eredményt. Jól tudjuk használni a put módszert. Íme a példa teljes kódja:

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);
   }
}
Valószínűleg már sejtette, mi lesz az eredmény:

{1=Stan, 2=Kyle, 3=Kenny, 4=Cartman, 5=Kenny}
Ezt várták tőlünk? Most Kennynek két kulcsa van a HashMap- ünkben . Nos, szigorúan véve két különböző Kennyről van szó, bármit is értsünk, mivel tárgyunkat egyedileg a kulcs határozza meg. Olyan, mint egy személy útlevele, egyedinek kell lennie. Így nem lehet egyszerűen átnevezni vagy frissíteni a hashmap kulcsot, miután közvetlenül hozzáadta. Ez a művelet egyszerűen nem elérhető. Azonban megtévesztő manővert hajthat végre: szúrjon be egy új bejegyzést az új kulccsal, és törölje a régit. Ezt a HashMap eltávolítási módszerrel lehet megtenni . A remove() nem csak a társítást távolítja el, hanem a törölt értéket is visszaadja (ha korábban ott volt). Példánkat egészítsük ki ezzel a művelettel:

//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);
   }
}
Most végre megkaptuk, amire szükségünk volt, frissítettük a kulcsot, amivel megkereshetjük Kennyt. Íme a kimenet:
Kenny {1=Stan, 2=Kyle, 4=Cartman, 5=Kenny}
Természetesen tetszőleges sorrendben elvégezhetjük a „régi” Kenny eltávolításának és egy új hozzáadásának műveleteit. Lényegében függetlenek. Vagy rövidítse le a kódot egyetlen sor használatával:

names.put(5, names.remove(3));
Az eredmény biztosan ugyanaz lesz. Tehát az egyetlen helyes módja a kulcs megváltoztatásának a Java HashMapben, ha törli a bejegyzést, és beilleszti ugyanazt az értéket egy új kulccsal. Megteheti más módon is, de ez majdnem ugyanaz lesz, mint egy elem hozzáadásával és eltávolításával.
Hozzászólások
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION