You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

两个Map对应值相乘求和的最优实现方法

同键Map值乘积求和实现方案

原代码问题分析

  • 两层for循环对两个Map的值做了全量笛卡尔积遍历,4个元素的场景下会产生16次无效计算,时间复杂度为O(n²),性能极差
  • 代码中没有做累加操作,每次循环都会直接覆盖total的值,最终只会保留最后一次循环的计算结果,和预期逻辑不符

正确实现方案

仅需要遍历其中一个Map的键,直接取另一个Map相同键对应的值相乘后累加即可,时间复杂度为O(n),4个元素的场景下仅需要4次计算:

普通循环实现

Map<String, Integer> map1= new HashMap<>();
Map<String, Integer> map2= new HashMap<>();

map1.put("one", 1);
map1.put("two", 2);
map1.put("three", 3);
map1.put("four", 4);

map2.put("one", 1);
map2.put("two", 2);
map2.put("three", 3);
map2.put("four", 4);

int total = 0;
for (String key : map1.keySet()) {
    total += map1.get(key) * map2.getOrDefault(key, 0);
}
System.out.println(total); // 输出结果:30

说明:使用getOrDefault是为了兼容极端情况下两个Map键不匹配的场景,如果你可以确定两个Map键完全一致,直接用get(key)即可

Java 8+ Stream 简化实现

int total = map1.entrySet().stream()
        .mapToInt(entry -> entry.getValue() * map2.get(entry.getKey()))
        .sum();

内容的提问来源于stack exchange,提问作者JuiceWorld

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 00:15:00