HashMap replace 和 put 的区别

新手上路,请多包涵

我想通过使用 HashMap 来制作直方图,关键应该是延迟,值是这种延迟发生的次数。 I am doubting to use the HashMap replace or the HashMap put function if an already existing delay has an new occurence.我是这样做的:

 int delay = (int) (loopcount-packetServed.getArrivalTime());
if(histogramType1.containsKey(delay)) {
    histogramType1.replace(delay, histogramType1.get(delay) + 1);
} else {
    histogramType1.put(delay, 1);
}

这个对吗?还是我应该使用两倍的 put 函数?

原文由 StudentX 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.7k
1 个回答

putreplace 绝对没有区别,当存在所需键的当前映射时。来自 replace

仅在当前映射到某个值时才替换指定键的条目。

这意味着如果给定键已经存在映射,则 putreplace 将以相同的方式更新映射。两者都将返回与键关联的先前值。但是,如果该键没有映射,则 replace 将是空操作(什么都不做),而 put 仍将更新映射。


从 Java 8 开始,请注意您可以只使用

histogramType1.merge(delay, 1, Integer::sum);

这将照顾到每一个条件。来自 merge

如果指定的键尚未与值关联或与 null 关联,则将其与给定的非空值关联。否则,用给定重映射函数的结果替换关联值,或者如果结果为 null 则删除。

在这种情况下,如果条目不存在,我们将创建条目 delay -> 1 。如果确实存在,则通过将值递增 1 来更新它。

原文由 Tunaki 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏