【问题标题】:how to create copy of hash-map object without effecting the original object value如何在不影响原始对象值的情况下创建 hashmap 对象的副本
【发布时间】:2019-12-19 07:29:14
【问题描述】:

我正在尝试创建一个 hashmap 对象并从另一个 hashmap 分配它的值,但我发现副本上的更改影响了原始对象值

我怎样才能使副本不影响原件?

这是我的代码

  HashMap<Integer, Integer> productOfferLimitsForCart = new HashMap<>();
  productOfferLimitsForCart .put(Integer.valueOf(liveModel.getId()), 0);

  HashMap<Integer, Integer> OfferLimitsForCalculations = new HashMap<>();
  OfferLimitsForCalculations = productOfferLimitsForCart;

【问题讨论】:

    标签: java object hashmap


    【解决方案1】:

    使用复制构造函数:

    HashMap<Integer, Integer> OfferLimitsForCalculations = new HashMap<>(productOfferLimitsForCart);
    

    当你做任务时

    OfferLimitsForCalculations = productOfferLimitsForCart;
    

    两个变量都引用了同一个 HashMap 实例(并且 OfferLimitsForCalculations 引用的原始 Map 不再被任何变量引用)。

    【讨论】:

      【解决方案2】:

      您可以使用 putAll() 函数放置现有地图中的所有条目。

      HashMap<Integer, Integer> productOfferLimitsForCart = new HashMap<>();
      productOfferLimitsForCart .put(Integer.valueOf(liveModel.getId()), 0);
      
      HashMap<Integer, Integer> OfferLimitsForCalculations = new HashMap<>();
      OfferLimitsForCalculations.putAll(productOfferLimitsForCart);
      

      【讨论】:

        【解决方案3】:

        这不是您要创建的副本。你只是给它分配了第二个名字。

        您可以通过调用OfferLimitsForCalculations.putAll(productOfferLimitsForCart);创建一个燕子副本

        这将创建一个新地图,但其中包含相同的对象。因此,如果您对一张地图中的对象进行操作,您仍然会更改第二张地图的内容。但是只有整数这不应该是一个问题,因为通常整数实际上是最终的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-08-22
          • 1970-01-01
          • 2014-06-09
          相关资源
          最近更新 更多