4 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊
不管你是否調(diào)用temp.clear(),如果你li多次添加對(duì)同一個(gè)List對(duì)象的引用,li將包含對(duì)同一個(gè)List對(duì)象的多個(gè)引用,這意味著li.get(0) == li.get(1),,li.get(0) == li.get(2)等等......
對(duì)這些內(nèi)部之一進(jìn)行更改List將反映在所有其他內(nèi)部List,因?yàn)橹挥幸粋€(gè)List被多次引用。
因此,在循環(huán)的每次迭代中(在將其添加到 之前)分配一個(gè)新ArrayList實(shí)例是正確的做法。templi
List不過(guò),我會(huì)做一些小小的改變 - 在將新的內(nèi)部添加到外部之前創(chuàng)建新的內(nèi)部List:
for (int i = 0; i < AList.size(); i++){
for(int j =i+1; j < AList.size(); j++){
List<Integer> temp = new ArrayList<>();
temp.add(AList.get(i));
temp.add(AList.get(j));
li.add(temp);
}
}

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊
添加元素li
不會(huì)生成副本。因此,當(dāng)您調(diào)用時(shí),clear()
您將擁有兩個(gè)指向同一個(gè)對(duì)象的temp
元素和其中的一個(gè)元素。li
您可能只想temp
在內(nèi)循環(huán)中進(jìn)行聲明,這樣您每次都會(huì)得到一個(gè)新的循環(huán),而無(wú)需調(diào)用clear()
.

TA貢獻(xiàn)1883條經(jīng)驗(yàn) 獲得超3個(gè)贊
當(dāng)您調(diào)用.clear()
(或任何其他與此相關(guān)的方法)時(shí),您正在對(duì)相同的引用進(jìn)行操作。temp
在這里,如果您不在每次迭代中創(chuàng)建新列表,則會(huì)將 by引用的列表添加到li
。當(dāng)您調(diào)用 時(shí)clear()
,它們“全部”被清除,因?yàn)樗鼈兌贾赶蛲粋€(gè)對(duì)象。當(dāng)您每次迭代創(chuàng)建一個(gè)新列表時(shí),您將擁有不同的對(duì)象,并且可以獨(dú)立地對(duì)它們進(jìn)行操作。

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超8個(gè)贊
嘗試這樣做:
public static int getTheSubseq(List<Integer> AList){
// int[][] subsequences = new int[][];
List<List<Integer>> li = new ArrayList<>();
List<Integer> temp;
for (int i = 0; i < AList.size(); i++){
for(int j =i+1; j < AList.size(); j++){
temp = new ArrayList<>();
temp.add(AList.get(i));
temp.add(AList.get(j));
li.add(temp);
}
}
System.out.println(li);
return 1;
}
添加回答
舉報(bào)