gpt4 book ai didi

java - 为什么 v != null ? v++ : 1 is not the same as (v ! = 空? v : 0) + 1 on incrementing a key on HashMap. 计算?

转载 作者:行者123 更新时间:2023-12-04 02:29:29 30 4
gpt4 key购买 nike

我想应用一个计算方法,如果键存在则增加值,否则将 1。有

Map<Integer, Integer> map = new HashMap<>();

我不明白为什么

for (int i = 0; i < 10; i++) map.compute(1, (k, v) -> v != null ? v++ : 1);

{1=1} 中的结果和

for (int i = 0; i < 10; i++) map.compute(1, (k, v) -> (v != null ? v : 0) + 1);

{1=10} 的结果?

我对第一种情况的理解是:

  • 如果有k键的值,从v++中取出结果放回去,否则填1

虽然秒的情况是:

  • 如果有一个值是k k 保存v+1,否则保存0+1,也就是1

为什么在这种情况下运行 v++ 不会导致 v+1

最佳答案

因为 (k, v) -> (v != null) ? v++ : 1 将在第一次迭代后始终返回 1。

在第一次迭代中,v != null 的计算结果为 false,1 将映射到键 1。在所有后续调用中,条件将为真并使用 v++,事实上正在使用后增量 v++1将一直是新的映射值(而不是 2)。

v++ 递增 lambda 表达式的局部参数,而不是映射中的值(记住,Java is pass by value)

如果您使用 ++v 而不是 v++,您也会得到 10。这将起作用,因为新的映射值已经递增(不像 v++ 获取值然后然后递增 v)

(v != null ? v : 0) + 1 另一方面,总是将 1 添加到当前映射值(它不会受到影响来自 v++)

的行为

关于java - 为什么 v != null ? v++ : 1 is not the same as (v ! = 空? v : 0) + 1 on incrementing a key on HashMap. 计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65254693/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com