ArrayList<Integer> a =new ArrayList<Integer>();
ArrayList<ArrayList<Integer>> j =new ArrayList<ArrayList<Integer>>();
a.add(1);
a.add(2);
a.add(3);
for(int c=0; c<10; c++){
j.add(a);
}
j.get(3).add(1);
System.out.println(j);
有没有人知道为什么这个代码为j的每个元素添加1而不是只有第三个元素,我该怎么做才能解决这个问题?
答案 0 :(得分:11)
将1
添加到数组列表a
时会发生这种情况。
所以基本上所有10个ArrayList j
索引都指向一个ArrayList a
。因此,从j
的任何索引打印值将始终为您提供相同的结果。
让每个索引指向不同的数组列表:
答案 1 :(得分:3)
您在ArrayList
的每个元素中使用了相同的a
j
个实例。
如果您希望它们不同,则必须为ArrayList
的每个元素创建j
的新实例。
答案 2 :(得分:2)
for(int c=0; c<10; c++)
{
j.add(new ArrayList<>(a));
}
在代码中,a是指向ArrayList所在的内存位置的指针。
答案 3 :(得分:-1)