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

Java如何新建HashMap并从中删除元素且不影响原HashMap

问题根因

Java中对象类型的赋值是引用传递,代码里th = address只是把th这个变量指向了原address Map对应的堆内存地址,并没有生成新的Map实例。两个变量实际操作的是同一个Map对象,因此对th的修改会同步作用到原address上。

解决方案

你需要先创建一个全新的Map实例,将原address的内容完整复制到新实例后,再对新实例做修改即可。你的场景中Map的value是不可变的BigDecimal类型,直接做浅拷贝就可以满足需求,示例代码如下:

public static final Home newInstance(
        DbHome homeplan,
        Map<String, BigDecimal> address) {
    // 新建HashMap实例,复制address的所有键值对
    Map<String, BigDecimal> th = new HashMap<>(address);
    // 仅修改新的Map实例,不会影响原address
    th.remove("NED");
    // 后续业务逻辑
}

其他可选复制方式

  • 如果你使用JDK 10及以上版本,且后续不需要再修改th的内容,可以使用Map.copyOf(address)生成不可变的新Map。
  • 也可以通过putAll方法手动实现复制:
Map<String, BigDecimal> th = new HashMap<>();
th.putAll(address);

提示:如果入参address可能为null,需要先做非空校验再执行复制操作,避免触发空指针异常。

内容的提问来源于stack exchange,提问作者Deividas.r

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:09:04