Bạn biết rằng luôn có một khóa và một giá trị trong HashMap hoặc bất kỳ Map nào khác . Khóa được gọi là khóa vì một lý do vì bạn có quyền truy cập vào các giá trị bằng khóa. Khóa là duy nhất, nhưng giá trị thì không. Vì vậy, bạn không thể lấy khóa theo giá trị vì các giá trị có thể bị trùng lặp. Trong bài viết này, chúng ta sẽ tìm hiểu cách cập nhật giá trị của khóa hiện có trong HashMap trong Java. Hãy nhớ cú pháp Java. HashMap trong Java được khai báo theo cách tiếp theo:

 HashMap<Key, Value> name
Hãy lấy một ví dụ. Giả sử, chúng tôi có bốn người bạn và đặc biệt đối với họ, chúng tôi đã tạo và điền vào HashMap tên của họ. Khóa của họ là số nguyên.

Map<Integer, String> names = new HashMap<Integer, String>();
       names.put(1, "Stan");
       names.put(2, "Kyle");
       names.put(3, "Kenny");
       names.put(4, "Cartman");
Lưu ý: bạn có thể tạo và điền vào Bản đồ của mình theo nhiều cách khác nhau. Ví dụ, sử dụng khối khởi tạo. Đây là:

Map<Integer, String> names = new HashMap<Integer, String>() {
           {
               put(1, "Stan");
               put(2, "Kyle");
               put(3, "Kenny");
               put(4, "Cartman");
           }
       };
Hoặc sử dụng phương thứchàm tạo HashMap với đối số bản đồ khác . Phương pháp này có sẵn từ phiên bản 9 trở lên.

Map<Integer, String> names = new HashMap<>(Map.of(1, "Stan", 2, "Kyle", 3, "Kenny", 4, "Cartman"));
Như chúng tôi đã nói trước đây, trong các khóa HashMap của chúng tôi là các số nguyên và các giá trị chứa một số chuỗi, trong trường hợp của chúng tôi là tên của các ký tự. Chà, hãy nói rằng có điều gì đó tồi tệ đã xảy ra với Kenny (những độc giả biết loạt phim hoạt hình South Park, biết chắc rằng điều gì đó tồi tệ đã xảy ra với Kenny khá thường xuyên). Vì vậy, khi điều đó xảy ra, chúng tôi phải loại bỏ Kenny khỏi công ty này ( HashMap của chúng tôi ) và thay thế anh ấy bằng một người bạn khác, chẳng hạn như tên là Butters. Điều này rất dễ thực hiện vì đây là thao tác cập nhật giá trị. Cậu bé Kenny của chúng ta có chìa khóa == 3 . Chúng ta cần thay đổi giá trị cho phím 3, nơi có Kenny. Chúng ta có thể sử dụng phương thức put() để làm điều này:

names.put(3, "Butters");
Trong trường hợp này, nếu chúng ta hiển thị bản đồ của mình trên màn hình, kết quả sẽ như sau:

{1=Stan, 2=Kyle, 3=Butters, 4=Cartman}
Điều gì sẽ xảy ra nếu mọi thứ đều ổn với Kenny và chúng tôi muốn giữ anh ấy ở lại công ty, nhưng chúng tôi có lý do để cập nhật khóa của anh ấy? Nói đi, hắn không phải số ba nữa, mà là số năm. Hãy đặt lại Kenny vào bản đồ của chúng ta bằng phím 5 và in kết quả. Chúng ta có thể sử dụng tốt phương thức put . Đây là mã hoàn chỉnh cho ví dụ này:

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);
   }
}
Chắc bạn cũng đã đoán được kết quả sẽ ra sao:

{1=Stan, 2=Kyle, 3=Kenny, 4=Cartman, 5=Kenny}
Đây có phải là những gì chúng ta đã mong đợi? Bây giờ Kenny có hai khóa trong HashMap của chúng tôi . Chà, nói một cách chính xác, đây là hai Kenny khác nhau, bất kể chúng ta muốn nói gì, vì đối tượng của chúng ta được xác định duy nhất bởi khóa. Nó giống như hộ chiếu của một người, nó phải là duy nhất. Vì vậy, bạn không thể đổi tên hoặc cập nhật khóa hashmap sau khi được thêm trực tiếp. Hoạt động này chỉ đơn giản là không có sẵn. Tuy nhiên, bạn có thể thực hiện một thao tác đánh lừa: chèn một mục mới bằng khóa mới và xóa mục cũ. Điều này có thể được thực hiện bằng phương pháp loại bỏ HashMap . remove() không chỉ xóa liên kết mà còn trả về giá trị đã xóa (nếu nó đã ở đó trước đó). Hãy bổ sung ví dụ của chúng tôi với hoạt động này:

//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);
   }
}
Bây giờ chúng tôi cuối cùng đã có những gì chúng tôi cần, đã cập nhật khóa mà chúng tôi có thể tìm thấy Kenny. Đây là đầu ra:
Kenny {1=Stan, 2=Kyle, 4=Cartman, 5=Kenny}
Tất nhiên, chúng ta có thể thực hiện các thao tác xóa Kenny “cũ” và thêm một cái mới theo bất kỳ thứ tự nào. Họ về cơ bản là độc lập. Hoặc rút ngắn mã của bạn chỉ bằng một dòng:

names.put(5, names.remove(3));
Chắc chắn kết quả sẽ giống nhau. Vì vậy, cách thích hợp duy nhất để thay đổi một khóa trong Java HashMap là xóa mục nhập và chèn cùng một giá trị bằng một khóa mới. Bạn có thể làm điều đó theo một cách khác nhưng nó sẽ gần như giống nhau về việc thêm và xóa một phần tử.