我试图制作一个哈希图对象并从另一个哈希图分配它的值,但是我发现副本上的更改影响了原始对象的值
如何使副本不影响原件?
这是我的代码
(input[0] == 'P' && input[1] == '\0')
答案 0 :(得分:5)
使用复制构造函数:
HashMap<Integer, Integer> OfferLimitsForCalculations = new HashMap<>(productOfferLimitsForCart);
进行分配时
OfferLimitsForCalculations = productOfferLimitsForCart;
两个变量都引用相同的HashMap
实例(并且Map
所引用的原始OfferLimitsForCalculations
不再被任何变量引用)。
答案 1 :(得分:2)
您可以使用putAll()函数放置现有地图中的所有条目。
HashMap<Integer, Integer> productOfferLimitsForCart = new HashMap<>();
productOfferLimitsForCart .put(Integer.valueOf(liveModel.getId()), 0);
HashMap<Integer, Integer> OfferLimitsForCalculations = new HashMap<>();
OfferLimitsForCalculations.putAll(productOfferLimitsForCart);
答案 2 :(得分:2)
这不是您要创建的副本。您只是为其分配了第二个名称。
您可以通过调用OfferLimitsForCalculations.putAll(productOfferLimitsForCart);
这将创建一个新地图,但其中包含相同的对象。因此,如果对一个地图内的对象进行操作,则仍在更改第二个地图的内容。但是仅使用整数,这应该不是问题,因为通常整数实际上是最终的。