在java中向2d arraylist添加元素

时间:2017-01-11 07:46:31

标签: java arraylist

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而不是只有第三个元素,我该怎么做才能解决这个问题?

4 个答案:

答案 0 :(得分:11)

将数组列表a添加到数组列表j 10次时会发生这种情况。 ![enter image description here

1添加到数组列表a时会发生这种情况。

![enter image description here

所以基本上所有10个ArrayList j索引都指向一个ArrayList a。因此,从j的任何索引打印值将始终为您提供相同的结果。

让每个索引指向不同的数组列表:

enter image description here

答案 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)

实际上j.get(3)将arrayList a引用为每个j.get(c),这就是为什么j上指向a的每个单元都被改变的原因。下一张图片显示了它的工作原理。illustration