将数组存储到ArrayList而不分配另一个数组?

时间:2011-09-01 15:44:01

标签: java arrays arraylist

考虑这个例子:

int[] a = new int[] {0,0};
ArrayList<int[]> b = new ArrayList<int[]>();

b.add(a);
a[0] = 1;
a[1] = 1;
b.add(a);

b现在是{[1,1],[1,1]}。 如何在不分配其他数组的情况下确保{[0,0],[1,1]}

4 个答案:

答案 0 :(得分:2)

它只是添加了参考。所以它将是{[1,1],[1,1]}。除了分配另一个数组之外,我认为还有其他解决方案。

答案 1 :(得分:2)

  

不分配另一个数组

嗯,您希望同时拥有两个独立的值集。这需要两个数组(或两个列表等)。

答案 2 :(得分:1)

数组是一个对象。如果更改数组,将它添加到列表中的次数无关紧要,toString将显示数组的最新状态。 列表的toString迭代他的元素并在每个元素上调用toString。 我不知道你想做什么,但也许你应该阅读一些基本的教程。

答案 3 :(得分:0)

ArrayList<int[]>的每个元素都是对int数组的引用。如果您添加两次相同的数组(正如您所做的那样),它将在列表中重复。更改int数组的元素将在ArrayList中的每次出现时反映出来。要拥有不同的阵列,您需要分配单独的阵列。这样的事情会做:

int[] a = new int[] {0,0};
ArrayList<int[]> b = new ArrayList<int[]>();

b.add(a.clone()); // add a distinct array
a[0] = 1;
a[1] = 1;
b.add(a);

然后b的内容将是{[0,0],[1,1]}。