を使ってヒストグラムを作りたいのですHashMap
が、キーは遅延、値はこの遅延が発生する回数です。既存の遅延に新しい発生があった場合、HashMap
replace
またはHashMap
put
関数を使用するかどうか迷っています。私は次のようにしました:
int delay = (int) (loopcount-packetServed.getArrivalTime());
if(histogramType1.containsKey(delay)) {
histogramType1.replace(delay, histogramType1.get(delay) + 1);
} else {
histogramType1.put(delay, 1);
}
これは正しいでしょうか? それとも put 関数を 2 回使用する必要がありますか?
ベストアンサー1
目的のキーの現在のマッピングがある場合put
、とにはまったく違いはありません。replace
replace
:
指定されたキーが現在何らかの値にマップされている場合にのみ、そのキーのエントリを置き換えます。
つまり、指定されたキーのマッピングがすでに存在する場合、 とput
はreplace
どちらも同じ方法でマップを更新します。 どちらも、キーに関連付けられた以前の値も返します。 ただし、そのキーのマッピングが存在しない場合は、 はreplace
何も行いません (何も行いません) が、 はput
引き続きマップを更新します。
Java 8以降では、
histogramType1.merge(delay, 1, Integer::sum);
これであらゆる条件が満たされます。merge
:
指定されたキーがまだ値に関連付けられていない場合、または に関連付けられている場合は、
null
指定された null 以外の値に関連付けます。それ以外の場合は、関連付けられている値を指定された再マッピング関数の結果に置き換えるか、結果が の場合は を削除しますnull
。
この場合、エントリが存在しない場合はエントリを作成しますdelay -> 1
。エントリが存在する場合は、値を 1 増やして更新します。