请帮我在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接收到我添加的整数..
请帮助..提前致谢.. :))
答案 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);
已经回答......