HashMap的replace和put之间的区别

Stu*_*ntX 20 java hashmap

我想通过使用a来制作直方图HashMap,键应该是延迟,值是此延迟发生的次数.如果已经存在的延迟有新的发生,我怀疑使用HashMap replaceHashMap put函数.

我是这样做的

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

它是否正确?或者我应该使用put函数的两倍?

Tun*_*aki 28

有绝对没有区别put,并replace当对于想要的键当前映射.来自replace:

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

这意味着,如果已经对给定键的映射关系,双方putreplace会更新以同样的方式在地图.两者都将返回与键关联的先前值.但是,如果没有该键的映射,那么replace将是无操作(将不执行任何操作),而put仍将更新映射.


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

histogramType1.merge(delay, 1, Integer::sum);
Run Code Online (Sandbox Code Playgroud)

这将照顾每一个条件.来自merge:

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

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


Jea*_*art 4

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

您可以根据您更容易阅读的方式使用其中之一。