[英]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.