在ArrayList中添加整数<arraylist <integer>&gt;

时间:2015-11-11 08:12:31

标签: java arraylist

请帮我在ArrayList里面的ArrayList中添加整数。 这是代码..

ArrayList<ArrayList<Integer>> player = new ArrayList<ArrayList<Integer>>(10);
ArrayList<Integer> array = new ArrayList<Integer>(10);
array.add(1);
array.add(2);
array.add(3);
array.add(4);
array.add(5);

player.add(array);
player.add(array);

如果我使用debug来检查数组和播放器中的内容..

array[1,2,3,4,5]
player[[1,2,3,4,5],[1,2,3,4,5]]

现在,我想在播放器的ArrayList插槽0中添加Integer:

player.get(0).add(6);

但不是得到这个:

player[[1,2,3,4,5,6],[1,2,3,4,5]]

我得到了这个:

player[[1,2,3,4,5,6],[1,2,3,4,5,6]]

简而言之,播放器的ArrayLost插槽0和插槽1接收到我添加的整数..

请帮助..提前致谢.. :))

5 个答案:

答案 0 :(得分:3)

您已将相同的 ArrayList添加到播放器ArrayList两个条目中。播放器ArrayList的两个条目都是完全相同的对象。

你应该再做一次ArrayList

ArrayList<Integer> array2 = new ArrayList<Integer>();

然后将其添加为播放器ArrayList的第二项。

答案 1 :(得分:0)

那是因为向播放器添加两次数组不会将数组的值添加到播放器两次,它只会将数组引用的两个副本添加到播放器

player[[1,2,3,4,5],[1,2,3,4,5]]

真的是

player[array,array]

您可以使用例如jUnits assertTrue:

对此进行测试
assertTrue(player.get(0) == player.get(1))

答案 2 :(得分:0)

正如其他人所说,你实际上是在两个列表中添加了相同的元素。

如果您不想使用初始值填充两个ArrayLists。您可以保留代码并仅更改以下行:

player.add(array);
player.add(array);

为:

player.add(array);
player.add(new ArrayList(array)); // alternatively player.add(array.clone());

这使得一个新的ArrayList成为玩家的第二个条目。

答案 3 :(得分:0)

您的代码存在的问题是 - 当您将array添加到player对象时,您会传递array对象的相同引用。

当您执行此操作player.get(0)时,您将获得ArrayList<Integer> array = new ArrayList<Integer>(10);的相同对象,然后当您执行添加player.get(0).add(6);时,您指向array对象的引用和java通过引用传递对象。见this SO线程

答案 4 :(得分:0)

ArrayList<ArrayList<Integer>> player = new ArrayList<ArrayList<Integer>>(10);
ArrayList<Integer> array = new ArrayList<Integer>(10);
array.add(1);
array.add(2);
array.add(3);
array.add(4);
array.add(5);
ArrayList<Integer> array1 = new ArrayList<Integer>(array);
player.add(array);
player.add(array1);

已经回答......