HashMap的替换和放置之间的区别

2022-08-31 22:30:47

我想通过使用一个直方图来制作直方图,键应该是延迟,值是这个延迟发生的次数。我怀疑如果已经存在的延迟有新的发生,是否使用或函数。我是这样做的:HashMapHashMapreplaceHashMapput

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

这是正确的吗?还是我应该使用两次看跌函数?


答案 1

当存在所需密钥的当前映射时,绝对没有区别。从替换putreplace

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

这意味着,如果给定键已经存在映射,则两者都将以相同的方式更新映射。两者还将返回与密钥关联的上一个值。但是,如果该键没有映射,则将是 no-op(将不执行任何操作),而仍将更新映射。putreplacereplaceput


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

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

这将照顾到每一个条件。从合并

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

在本例中,如果条目不存在,我们将创建该条目。如果它确实存在,则通过将值递增 1 来更新它。delay -> 1


答案 2

在您的情况下,由于您首先检查该值是否包含在地图中,因此使用或导致相同的结果。putreplace

您可以根据您更具可读性的内容使用其中任何一种。