CodeGym /Java 博客 /随机的 /如何更新 HashMap 中现有键的值
John Squirrels
第 41 级
San Francisco

如何更新 HashMap 中现有键的值

已在 随机的 群组中发布
您知道HashMap或任何其他Map中始终有一个键和一个值。键被称为键是有原因的,因为您可以通过键访问值。键是唯一的,但值不是。所以你不能按值获取键,因为值可以重复。在本文中,我们将了解如何在 Java 中更新HashMap中现有键的值。让我们记住 Java 语法。Java 中的HashMap声明方式如下:

 HashMap<Key, Value> name
让我们举个例子。比如说,我们有四个朋友,我们特别为他们创建了一个 HashMap,并用他们的名字填充了一个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 构造函数与其他映射参数。此方法在版本 9 及更高版本中可用。

Map<Integer, String> names = new HashMap<>(Map.of(1, "Stan", 2, "Kyle", 3, "Kenny", 4, "Cartman"));
正如我们之前所说,在我们的HashMap中,键是整数,值包含一些字符串,在我们的例子中是字符的名称。好吧,假设肯尼发生了一些不好的事情(那些了解南方公园卡通系列的读者肯定知道肯尼经常发生不好的事情)。因此,当它发生时,我们必须将 Kenny 从这家公司(我们的HashMap)中移除,并用另一个朋友代替他,比如说,名字叫 Butters。这很容易做到,因为它是一个更新值操作。我们的肯尼男孩有一把钥匙 == 3。我们需要更改 Kenny 所在的键 3 的值。我们可以使用put()方法来做到这一点:

names.put(3, "Butters");
在这种情况下,如果我们在屏幕上显示我们的地图,结果将如下所示:

{1=Stan, 2=Kyle, 3=Butters, 4=Cartman}
如果 Kenny 一切都很好并且我们想让他留在公司,但我们有理由更新他的密钥怎么办?说吧,他已经不是三号了,而是五号了。让我们再次使用键 5 将 Kenny 放入我们的地图并打印结果。我们可以很好地使用put方法。下面是这个例子的完整代码:

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);
   }
}
您可能已经猜到结果是什么:

{1=Stan, 2=Kyle, 3=Kenny, 4=Cartman, 5=Kenny}
这是我们的预期吗?现在 Kenny 在我们的HashMap中有两个键。好吧,严格来说,这是两个不同的 Kenny,无论我们指的是什么,因为我们的对象是由键唯一确定的。它就像一个人的护照,应该是独一无二的。因此,您不能直接重命名或更新 hashmap 键。这个操作根本就不行。但是,您可以采取欺骗手段:使用新密钥插入新条目并删除旧条目。这可以使用HashMap 的 remove方法来完成。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);
   }
}
现在我们终于得到了我们需要的东西,更新了我们可以找到 Kenny 的密钥。这是输出:
肯尼 {1=斯坦,2=凯尔,4=卡特曼,5=肯尼}
当然,我们可以按照任意顺序进行删除“旧”Kenny和添加新Kenny的操作。他们本质上是独立的。或者仅使用一行来缩短您的代码:

names.put(5, names.remove(3));
结果肯定是一样的。因此,在 Java HashMap中更改键的唯一正确方法是删除条目并使用新键插入相同的值。你可以用不同的方式来做,但添加和删除元素几乎是一样的。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION