簡體   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