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

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

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

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


当前回答

简化的Java 8方式:

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

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

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

其他回答

没有NullPointerException的更干净的解决方案是:

map.replace(key, map.get(key) + 1);

您可以像下面这样递增,但您需要检查是否存在,以便不会抛出NullPointerException

if(!map.containsKey(key)) {
 p.put(key,1);
}
else {
 p.put(key, map.getKey()+1);
}

使用for循环来增加索引:

for (int i =0; i<5; i++){
    HashMap<String, Integer> map = new HashMap<String, Integer>();
    map.put("beer", 100);

    int beer = map.get("beer")+i;
    System.out.println("beer " + beer);
    System.out ....

}

对于这个问题,有一些误导性的回答暗示,如果键存在,Hashtable put方法将替换现有的值,这对于Hashtable不是正确的,而对于HashMap是正确的。HashMap参见Javadoc http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html#put%28K,%20V%29

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

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