Java - 将另一个String值添加到现有HashMap Key而不覆盖?

jxc*_*jxc 10 java hashmap

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

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

谢谢你的帮助.

SCB*_*SCB 16

你有什么希望在这里实现的?

Map(在HashMap)你的情况是从一个"重点"到另一个值的直接的"映射".

例如

"foo" -> 123
"bar" -> 321
"far" -> 12345
"boo" -> 54321
Run Code Online (Sandbox Code Playgroud)

这意味着如果您尝试:

myHashMap.get("foo");
Run Code Online (Sandbox Code Playgroud)

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

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

说:

myHashMap.put("foo", 42);
Run Code Online (Sandbox Code Playgroud)

"foo"地图中的旧值将替换为42.所以它会成为:

"foo" -> 42
"bar" -> 321
"far" -> 12345
"boo" -> 54321
Run Code Online (Sandbox Code Playgroud)

但是,如果需要String从单个键映射的多个对象,则可以使用另一个可以存储多个对象的对象,例如数组或列表(HashMap如果需要,甚至可以存储其他对象).

例如,如果您要使用ArrayLists,当您为其分配值时HashMap(比如说它被称为myHashMap),您首先要检查该密钥是否已被使用过,如果没有,则创建一个新ArrayList的要添加的值,如果有,则只需将值添加到列表中.

(假设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);
}
Run Code Online (Sandbox Code Playgroud)


Pra*_*ala 11

你可以这样做!

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);
}
Run Code Online (Sandbox Code Playgroud)

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

map.computeIfAbsent(key, k ->new ArrayList<>()).add(value);
Run Code Online (Sandbox Code Playgroud)


Eve*_*sle 5

您想要连接两个字符串吗?

map.put(key, val);
if (map.containsKey(key)) {
    map.put(key, map.get(key) + newVal);
}
Run Code Online (Sandbox Code Playgroud)

或者您想要该键的所有值的列表?

HashMap<String,List<String>> map = new HashMap<String,List<String>>();
String key = "key";
String val = "val";
String newVal = "newVal";
List<String> list = new ArrayList<String>();
list.add(val);
map.put(key, list);
if (map.containsKey(key)) {
    map.get(key).add(newVal);
}
Run Code Online (Sandbox Code Playgroud)