乘以两个HashMaps的值

时间:2014-12-05 05:25:35

标签: java hashmap

如果我有两个HashMap s,hm1hm2,我怎样才能迭代这两个值并将两个值在两个HashMap的每个点上相乘s和总和?它们都是相同的,所以我不需要担心键,只需要担心值。

数据的格式为

hm1 = 
(A, 3)
(B, 4)
(C, 7)

hm2 =
(A, 4)
(B, 6)
(C, 3)

然后我想做这样的事情,但显然这段代码不正确,因为我只是通过hm1进行迭代。

double sum = 0.00;
for (Map.Entry<String, Double> hm : hm1.entrySet()) {
    sum += hm1.getValue() * hm2.getValue();
}

所以我基本上会循环执行:

1st iteration: Sum = 0 + 3*4
2nd Iteration: Sum = 12 + 4*6
3rd iteration: Sum = 36 + 7*3
Exit Loop:
Sum = 57

感谢您提供任何帮助。

2 个答案:

答案 0 :(得分:2)

鉴于两个HashMaps具有相同数量的条目,并且所有条目具有相同的对应密钥,那么获取总和的可靠方式将是这样的:

double sum = 0;

/* iterate through all the keys in hm1 */
/* order doesn't matter */
for (String key : hm1.keySet()) {
    double value1 = hm1.get(key);
    double value2 = hm2.get(key);
    sum += value1 * value2;
}

答案 1 :(得分:0)

您可以在第一张地图上使用迭代中的键来获取第二张地图的值:

double sum = 0.00;
for (Map.Entry<String, Double> hm : hm1.entrySet()) {
   double hm2Value = hm2.get(hm.getKey());
   sum += hm.getValue() * hm2Value;
}

请注意,这仅适用于两个地图具有相同键的情况。如果两者都缺少密钥,那么你必须考虑如何处理它。