假设我们在Java中有一个HashMap<String, Integer>。

我如何更新(增量)字符串键的整数值为我找到的字符串的每个存在?

人们可以删除并重新输入配对,但开销将是一个问题。 另一种方法是只放一双新的,旧的就会被替换掉。

在后一种情况下,如果hashcode与我试图插入的新键发生冲突,会发生什么?哈希表的正确行为是为它分配一个不同的位置,或者在当前桶中对它进行列表。


当前回答

hashmap.put(key, hashmap.get(key) + 1);

put方法将替换现有键的值,如果不存在则创建该键。

其他回答

Java 8方式:

您可以使用computeIfPresent方法并为其提供一个映射函数,该函数将被调用以基于现有值计算一个新值。

例如,

Map<String, Integer> words = new HashMap<>();
words.put("hello", 3);
words.put("world", 4);
words.computeIfPresent("hello", (k, v) -> v + 1);
System.out.println(words.get("hello"));

或者,你可以使用merge方法,其中1是默认值,函数将现有值加1:

words.merge("hello", 1, Integer::sum);

此外,还有一些其他有用的方法,如putIfAbsent、getOrDefault、forEach等。

简化的Java 8方式:

map.put(key, map.getOrDefault(key, 0) + 1);

它使用HashMap的方法来检索键的值,但如果无法检索键,则返回指定的默认值(在本例中为'0')。

HashMap<K,V> getOrDefault(对象键,V defaultValue)

Try:

HashMap hm=new HashMap<String ,Double >();

注意:

String->give the new value; //THIS IS THE KEY
else
Double->pass new value; //THIS IS THE VALUE

您可以更改hashmap中的键或值,但不能同时更改两者。

使用Java8内置函数“computeIfPresent”

例子:

public class ExampleToUpdateMapValue {

    public static void main(String[] args) {
        Map<String,String> bookAuthors = new TreeMap<>();
        bookAuthors.put("Genesis","Moses");
        bookAuthors.put("Joshua","Joshua");
        bookAuthors.put("Judges","Samuel");

        System.out.println("---------------------Before----------------------");
        bookAuthors.entrySet().stream().forEach(System.out::println);
        // To update the existing value using Java 8
        bookAuthors.computeIfPresent("Judges", (k,v) -> v = "Samuel/Nathan/Gad");

        System.out.println("---------------------After----------------------");
        bookAuthors.entrySet().stream().forEach(System.out::println);
    }
}

一句话解决方案:

map.put(key, map.containsKey(key) ? map.get(key) + 1 : 1);