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
相关产品推荐
相关产品推荐

