Java - 向现有的 HashMap Key 添加另一个字符串值而不覆盖?

2022-09-03 03:34:12

我想知道是否有人能够帮助在Java中的现有密钥中添加另一个值?StringHashMap

我知道您可以使用该方法添加键值对。但是,它会覆盖现有值,而我希望使用相同的键存储和配对多个值?this.put("String", "String")

感谢您的帮助。


答案 1

你希望在这里实现什么目标?

A(the )在你的例子中是从一个“键”到另一个值的直接“映射”。MapHashMap

例如:

"foo" -> 123
"bar" -> 321
"far" -> 12345
"boo" -> 54321

这意味着,如果您要尝试:

myHashMap.get("foo");

它将返回值(当然,您返回的值的类型可以是您想要的任何值)。123

当然,这也意味着您对键的值所做的任何更改都会覆盖您为其分配的原始值,就像更改变量的值将覆盖分配的原始值一样。

说:

myHashMap.put("foo", 42);

地图中的旧值将替换为 。因此,它将变成:"foo"42

"foo" -> 42
"bar" -> 321
"far" -> 12345
"boo" -> 54321

但是,如果需要从单个键映射多个对象,则可以使用可以存储多个对象的其他对象,例如 Array 或 List(如果需要,甚至可以存储另一个对象)。StringHashMap

例如,如果要使用 ,则在为 , 赋值时(假设它已调用 ),您将首先检查该键之前是否被使用过,如果尚未使用过,则使用要添加的值创建一个新密钥,如果有,则只需将该值添加到列表中即可。ArrayListsHashMapmyHashMapArrayList

(假设并拥有所需的值)keyvalue

ArrayList<String> list;
if(myHashMap.containsKey(key)){
    // if the key has already been used,
    // we'll just grab the array list and add the value to it
    list = myHashMap.get(key);
    list.add(value);
} else {
    // if the key hasn't been used yet,
    // we'll create a new ArrayList<String> object, add the value
    // and put it in the array list with the new key
    list = new ArrayList<String>();
    list.add(value);
    myHashMap.put(key, list);
}

答案 2

你可以这样做!

Map<String,List<String>> map = new HashMap<>();
.
.
if(map.containsKey(key)){
    map.get(key).add(value);
} else {
   List<String> list = new ArrayList<>();
   list.add(value);
   map.put(key, list);
}

或者,您可以通过Java 8样式中的一行代码来做同样的事情。

map.computeIfAbsent(key, k ->new ArrayList<>()).add(value);