【问题标题】:Value changed while nested map in javajava中嵌套映射时值更改
【发布时间】:2021-06-25 10:43:24
【问题描述】:

我试图在地图(出)内创建地图(入)。但是,在我更改“in”之后,“out”的值会发生变化。这是我的代码示例:

      Map<String, LinkedHashMap<String, Integer>> out = new LinkedHashMap<String, LinkedHashMap<String, Integer>>();
      LinkedHashMap<String, Integer> in = new LinkedHashMap<String, Integer>();
      
      in.put("a", 100);
      out.put("u", in);
      System.out.println(out);
      out.put("s", in);
      in.put("b", 500);
      System.out.println(out);

这是输出:

{u={a=100}}
{u={a=100, b=500}, s={a=100, b=500}}

我应该怎么做才能得到这个结果:

{u={a=100}}
{u={a=100}, s={a=100}}

【问题讨论】:

  • 地图是“出”和“入”。 “a”是我用来填写“in”映射的键,对不起我的英语
  • 哦,我忘了改变量,这里是
  • 我也很担心。但如果我尝试过,例如: a = Map;字符串 b = "测试"; a.put("1", b); b = "tst"; a.put("2",b);结果将是: {a="test", b="tst"} 而不是 {a="tst", b="tst"} 。或者我的问题只是发生在地图上?

标签: java hashmap linkedhashmap


【解决方案1】:

我只是想猜测你到底想要什么。但是,如果您更改内部对象,则外部对象将继续引用同一实例。因此,例如,您可以在放入外部链接时创建新对象:

    Map<String, LinkedHashMap<String, Integer>> out = new LinkedHashMap<String, LinkedHashMap<String, Integer>>();
    LinkedHashMap<String, Integer> in = new LinkedHashMap<String, Integer>();

    in.put("a", 100);
    out.put("u", new LinkedHashMap<>(in));
    System.out.println(out);
    out.put("s", new LinkedHashMap<>(in));
    in.put("b", 500);
    System.out.println(out);
    System.out.println(in);

【讨论】:

    猜你喜欢
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 2020-09-21
    相关资源
    最近更新 更多