不理解这个哈希映射增量语法

时间:2015-01-10 18:27:51

标签: java hashmap

h是一个哈希映射(泛型字符,整数)。 第一个示例有效,但第二个示例抛出了错误的结果(未正确递增)。为什么呢?

正确

if (h.containsKey(c)) {
        h.put(c, h.get(c)+1);
}
else {
        h.put(c, 1);
}

if (h.containsKey(c)) {
        int value = h.get(c);
        h.put(c, value++);
}
else {
        h.put(c, 1);
}

5 个答案:

答案 0 :(得分:2)

您正在使用后递增,您的变量将传递给函数,并且仅在递增后

 h.put(c, ++value);

这是预增量的语法,在将变量传递给get调用之前递增变量

答案 1 :(得分:2)

你真的在这里误导了++。你不想增加变量,你只想使用它的值加一:

h.pus(c, value + 1)

请注意,value++会增加value,但会返回原始值,这就是您看到不同结果的原因。

虽然使用++value也解决了这个问题,但它仍然是对++的误用。

答案 2 :(得分:2)

preIncrement (++x)postIncrement (x++)不同。 并且您正在使用第二个,它将在执行指令后立即更改x的值。 因此,在h.put(c, value++);行中,您将value放入h哈希映射,然后增加其值。

但是当你想将value + 1添加到hashmap时,你必须这样写:

h.put(c, ++value);

因此它首先增加value,然后将其放入HashMap。

答案 3 :(得分:1)

在这种情况下,您将密钥c的值设置为hashmap,因为value++将在执行函数put后进行评估。

if (h.containsKey(c)) {
        int value = h.get(c);
        h.put(c, value++); // should be h.put(c,++value) or h.put(c,value+1)
}
else {
        h.put(c, 1);
}

尝试使用++value代替value+1

在java中有两种类型的递增函数,一种是postfixprefix

postfix - value++将返回value和do增量操作

prefix - ++value将执行递增操作,然后返回递增值

同样的故事是减少

more details

答案 4 :(得分:0)

使用value++,在将value传递给函数后将其分配给value,因此在增量之前使用的value变量将是{{1}}变量。