CodeGym /Blog Java /rawak /Cara mengemas kini nilai kunci sedia ada dalam HashMap
John Squirrels
Tahap
San Francisco

Cara mengemas kini nilai kunci sedia ada dalam HashMap

Diterbitkan dalam kumpulan
Anda tahu bahawa sentiasa ada kunci dan nilai dalam HashMap atau mana-mana Peta lain . Kunci dipanggil kunci atas sebab tertentu kerana anda mendapat akses kepada nilai melalui kunci. Kuncinya unik, tetapi nilainya tidak. Jadi anda tidak boleh mendapatkan kunci mengikut nilai kerana nilai boleh diduplikasi. Dalam artikel ini, kita akan mengetahui cara mengemas kini nilai kunci sedia ada dalam HashMap di Java. Mari kita ingat sintaks Java. HashMap di Java diisytiharkan dengan cara seterusnya:

 HashMap<Key, Value> name
Mari kita ambil contoh. Katakan, kami mempunyai empat rakan dan terutamanya untuk mereka kami buat dan isikan HashMap dengan nama mereka. Kekunci mereka ialah nombor integer.

Map<Integer, String> names = new HashMap<Integer, String>();
       names.put(1, "Stan");
       names.put(2, "Kyle");
       names.put(3, "Kenny");
       names.put(4, "Cartman");
Nota: anda boleh membuat dan mengisi Peta anda dengan cara yang berbeza. Sebagai contoh, menggunakan blok permulaan. Ini dia:

Map<Integer, String> names = new HashMap<Integer, String>() {
           {
               put(1, "Stan");
               put(2, "Kyle");
               put(3, "Kenny");
               put(4, "Cartman");
           }
       };
Atau menggunakan kaedah dan pembina HashMap dengan argumen peta yang lain . Kaedah ini tersedia dari versi 9 dan lebih baru.

Map<Integer, String> names = new HashMap<>(Map.of(1, "Stan", 2, "Kyle", 3, "Kenny", 4, "Cartman"));
Seperti yang kami katakan sebelum ini, dalam kekunci HashMap kami ialah nombor integer, dan nilainya mengandungi beberapa rentetan, dalam kes kami, nama aksara. Baiklah, katakan sesuatu yang buruk telah berlaku kepada Kenny (pembaca yang mengetahui siri kartun South Park, pasti tahu bahawa sesuatu yang buruk telah berlaku kepada Kenny dengan kerap). Jadi apabila ia berlaku, kami perlu mengeluarkan Kenny daripada syarikat ini ( HashMap kami ), dan menggantikannya dengan rakan lain, katakan, dengan nama Butters. Ini sangat mudah dilakukan kerana ia adalah operasi nilai kemas kini. Budak Kenny kita ada kunci == 3 . Kita perlu menukar nilai untuk kunci 3, di mana Kenny berada. Kita boleh menggunakan kaedah put() untuk melakukan ini:

names.put(3, "Butters");
Dalam kes ini, jika kami memaparkan peta kami pada skrin, hasilnya adalah seperti berikut:

{1=Stan, 2=Kyle, 3=Butters, 4=Cartman}
Bagaimana jika semuanya baik-baik saja dengan Kenny dan kami mahu mengekalkannya dalam syarikat itu, tetapi kami mempunyai sebab untuk mengemas kini kuncinya? Katakan, dia bukan nombor tiga lagi, tetapi nombor lima. Mari letakkan Kenny ke dalam peta kami sekali lagi dengan kunci 5 dan cetak hasilnya. Kita boleh menggunakan kaedah put dengan baik. Inilah kod lengkap untuk contoh ini:

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);
   }
}
Anda mungkin sudah meneka apakah hasilnya:

{1=Stan, 2=Kyle, 3=Kenny, 4=Cartman, 5=Kenny}
Adakah ini yang kita harapkan? Kini Kenny mempunyai dua kunci dalam HashMap kami . Sebenarnya, ini adalah dua Kenny yang berbeza, apa pun yang kita maksudkan, kerana objek kita ditentukan secara unik oleh kunci. Ia seperti pasport seseorang, ia sepatutnya unik. Oleh itu, anda tidak boleh menamakan semula atau mengemas kini kekunci peta cincang setelah ditambahkan secara langsung. Operasi ini tidak tersedia. Walau bagaimanapun, anda boleh membuat manuver yang menipu: masukkan entri baharu dengan kunci baharu dan padam yang lama. Ini boleh dilakukan menggunakan kaedah buang HashMap . remove() bukan sahaja mengalih keluar persatuan tetapi juga mengembalikan nilai yang dipadam (jika ia ada sebelum ini). Mari kita tambah contoh kita dengan operasi ini:

//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);
   }
}
Kini kami akhirnya mendapat apa yang kami perlukan, mengemas kini kunci yang kami gunakan untuk mencari Kenny. Berikut adalah outputnya:
Kenny {1=Stan, 2=Kyle, 4=Cartman, 5=Kenny}
Sudah tentu, kami boleh menjalankan operasi mengalih keluar Kenny "lama" dan menambah yang baharu dalam sebarang susunan. Mereka pada dasarnya bebas. Atau pendekkan kod anda menggunakan hanya satu baris:

names.put(5, names.remove(3));
Hasilnya pasti sama. Jadi, satu-satunya cara yang betul untuk menukar kunci dalam Java HashMap ialah memadamkan entri dan memasukkan nilai yang sama dengan kunci baharu. Anda boleh melakukannya dengan cara yang berbeza tetapi ia akan menjadi cerita yang hampir sama tentang menambah dan mengalih keluar elemen.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION