繁体   English   中英

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

[英]Add Integer in ArrayList<ArrayList<Integer>>

请帮我在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);

如果我使用调试检查数组和播放器内部的内容..

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接收到我添加的整数。

请帮忙..在此先感谢.. :)

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

你应该做第二个ArrayList

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

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

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

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

是真的

player[array,array]

您可以使用例如jUnits assertTrue来测试它:

assertTrue(player.get(0) == player.get(1))

正如其他人提到的那样,你实际上在两个列表中添加了相同

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

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

至:

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

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

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

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

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);

已经回答了......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM