假设我们在Java中有一个HashMap<String, Integer>。
我如何更新(增量)字符串键的整数值为我找到的字符串的每个存在?
人们可以删除并重新输入配对,但开销将是一个问题。 另一种方法是只放一双新的,旧的就会被替换掉。
在后一种情况下,如果hashcode与我试图插入的新键发生冲突,会发生什么?哈希表的正确行为是为它分配一个不同的位置,或者在当前桶中对它进行列表。
假设我们在Java中有一个HashMap<String, Integer>。
我如何更新(增量)字符串键的整数值为我找到的字符串的每个存在?
人们可以删除并重新输入配对,但开销将是一个问题。 另一种方法是只放一双新的,旧的就会被替换掉。
在后一种情况下,如果hashcode与我试图插入的新键发生冲突,会发生什么?哈希表的正确行为是为它分配一个不同的位置,或者在当前桶中对它进行列表。
当前回答
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中的键或值,但不能同时更改两者。
其他回答
没有NullPointerException的更干净的解决方案是:
map.replace(key, map.get(key) + 1);
将Integer替换为AtomicInteger,并调用其中一个incrementAndGet/getAndIncrement方法。
另一种方法是在你自己的MutableInteger类中包装一个int,这个类有一个increment()方法,你只需要解决线程安全问题。
您可以像下面这样递增,但您需要检查是否存在,以便不会抛出NullPointerException
if(!map.containsKey(key)) {
p.put(key,1);
}
else {
p.put(key, map.getKey()+1);
}
对于这个问题,有一些误导性的回答暗示,如果键存在,Hashtable put方法将替换现有的值,这对于Hashtable不是正确的,而对于HashMap是正确的。HashMap参见Javadoc http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html#put%28K,%20V%29
map.put(key, map.get(key) + 1);
应该没问题。它将更新现有映射的值。注意,这使用了自动装箱。在map.get(key)的帮助下,我们得到相应的key值,然后您可以根据您的需求进行更新。在这里,我正在更新,使value增加1。