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

Java中如何将多项式字符串存入TreeMap并对同幂次系数累加

解决方案

核心逻辑

问题本质是Map默认put操作对重复key的覆盖机制,只需要在存入前对已存在的key做值累加即可,常见实现方式有以下3种:

方法1:手动判断key是否存在(兼容所有Java版本)

存入新的幂次和系数前,先调用containsKey()方法判断该幂次是否已经存在:

  • 不存在:直接调用put(幂次, 系数)存入
  • 已存在:取出旧的系数值,和新系数求和后再调用put()覆盖旧值

示例代码片段:

TreeMap<Integer, Integer> polyMap = new TreeMap<>();
String a = "1x^2 2x^3 3x^4 4x^4 ";
// 先按空格拆分所有项
String[] terms = a.trim().split(" ");
for (String term : terms) {
    // 拆分系数和幂次:按x^拆分,^是正则特殊字符需要转义
    String[] parts = term.split("x\\^");
    int coefficient = Integer.parseInt(parts[0]);
    int power = Integer.parseInt(parts[1]);
    // 手动判断处理重复key
    if (polyMap.containsKey(power)) {
        polyMap.put(power, polyMap.get(power) + coefficient);
    } else {
        polyMap.put(power, coefficient);
    }
}

方法2:使用merge方法(Java 8+ 推荐写法)

Java 8为Map接口新增了merge方法,专门处理重复key的值合并逻辑,不需要手动写判断分支,代码更简洁。
merge方法三个参数分别是:目标key、key不存在时的默认存入值、key存在时的合并逻辑,示例代码仅需要替换方法1中的if-else判断部分即可:

polyMap.merge(power, coefficient, Integer::sum);

这行代码完全等价于方法1的整段if-else逻辑:如果幂次不存在就直接存入系数,存在就将新旧系数求和后存入。

方法3:使用compute方法(Java 8+)

也可以用compute方法实现相同效果,逻辑和merge类似:

polyMap.compute(power, (k, oldVal) -> oldVal == null ? coefficient : oldVal + coefficient);

以上三种方法最终输出的TreeMap都是{2=1, 3=2, 4=7},符合预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:15:04