循环打印正确答案但添加错误的地图?

时间:2014-01-17 22:30:25

标签: java arraylist hashmap bufferedreader

(右键单击并在新选项卡中打开图像以查看更大)

除了代码之外没什么好说的。

System.out.println("map add:" + parts[i].split("=")[0] + "=" + list);
        map2.put(parts[i].split("=")[0], list);

打印出与添加到地图中的内容完全相同但打印的内容和地图上的内容完全不同? 这是为什么?

1 个答案:

答案 0 :(得分:1)

您在每次迭代时添加相同的列表,因此键引用相同的列表(请参见下图)。 你实际在做的是:

  1. 您创建一个包含值[root, like]的列表,并将此列表与键root
  2. 相关联
  3. 在第二次迭代中,清除列表并将[eat, it]添加到此列表中,并将其与另一个键xsubj关联。
  4. 由于您没有创建新对象,因此键rootxsubj指向相同的列表对象,因此列表中的每个更改都将反映到共享它的所有键。

    enter image description here

    这就是为什么最后你得到了这个输出。

    不是调用clear(),而是在每次迭代时创建一个新列表。

    for(int i = 0; i < parts.length; i++){
      list = new ArrayList<>();
      list.add(...);
      /**
       * The code
      **/
    }