![](/img/trans.png)
[英]How to add an ArrayList<Integer> to an ArrayList<ArrayList<Integer>> again and again with different elements in ArrayList<Integer>
[英]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.