(右键单击并在新选项卡中打开图像以查看更大)
除了代码之外没什么好说的。
System.out.println("map add:" + parts[i].split("=")[0] + "=" + list);
map2.put(parts[i].split("=")[0], list);
打印出与添加到地图中的内容完全相同但打印的内容和地图上的内容完全不同? 这是为什么?
答案 0 :(得分:1)
您在每次迭代时添加相同的列表,因此键引用相同的列表(请参见下图)。 你实际在做的是:
[root, like]
的列表,并将此列表与键root
[eat, it]
添加到此列表中,并将其与另一个键xsubj
关联。 由于您没有创建新对象,因此键root
和xsubj
指向相同的列表对象,因此列表中的每个更改都将反映到共享它的所有键。
这就是为什么最后你得到了这个输出。
不是调用clear()
,而是在每次迭代时创建一个新列表。
for(int i = 0; i < parts.length; i++){
list = new ArrayList<>();
list.add(...);
/**
* The code
**/
}