我正在处理映射中的列表插入操作,但无法理解插入行为。插入时的映射和列表值模糊性:java
public class TestList {
public static void main(String[] args) {
String strarray[] = new String[5];
for(int i = 0; i < 5; i++){
strarray[i] = "Demo" + i;
}
Map<Integer, List<String>> cluesByText = new HashMap<Integer, List<String>>();
int j = 0;
for (String str : strarray) {
System.out.println(str);
List<String> s = cluesByText.get(str);
if (s == null) {
s = new LinkedList<String>();
cluesByText.put(j, s);
}
s.add(str);
s.add(str);
s.add(str);
s.remove(1);
// why it is storing without doing cluesByText.put(j,s);
j++;
}
//output is:
System.out.println(cluesByText);
}
}
问题是,在做列表插入到地图,然后通过嵌件改变列表中的内容/删除操作,则得到反映在存储在地图中上一行 列表。
打印地图内容的最终输出是。
{0=[Demo0, Demo0], 1=[Demo1, Demo1], 2=[Demo2, Demo2], 3=[Demo3, Demo3], 4=[Demo4, Demo4]}
我不能理解为什么它以这种方式发生,因为列表状态已经存储在地图中了?
您插入的列表值仍然指向原始列表的值。 –
与您的问题无关,但您的代码没有多大意义。 'cluesByText.get(str)'将总是返回null,因为你的Map的键是整数,而不是字符串。 – Eran