4 回答
TA贡献1818条经验 获得超7个赞
不管你是否调用temp.clear(),如果你li多次添加对同一个List对象的引用,li将包含对同一个List对象的多个引用,这意味着li.get(0) == li.get(1),,li.get(0) == li.get(2)等等......
对这些内部之一进行更改List将反映在所有其他内部List,因为只有一个List被多次引用。
因此,在循环的每次迭代中(在将其添加到 之前)分配一个新ArrayList实例是正确的做法。templi
List不过,我会做一些小小的改变 - 在将新的内部添加到外部之前创建新的内部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贡献1816条经验 获得超6个赞
添加元素li
不会生成副本。因此,当您调用时,clear()
您将拥有两个指向同一个对象的temp
元素和其中的一个元素。li
您可能只想temp
在内循环中进行声明,这样您每次都会得到一个新的循环,而无需调用clear()
.
TA贡献1883条经验 获得超3个赞
当您调用.clear()
(或任何其他与此相关的方法)时,您正在对相同的引用进行操作。temp
在这里,如果您不在每次迭代中创建新列表,则会将 by引用的列表添加到li
。当您调用 时clear()
,它们“全部”被清除,因为它们都指向同一个对象。当您每次迭代创建一个新列表时,您将拥有不同的对象,并且可以独立地对它们进行操作。
TA贡献1806条经验 获得超8个赞
尝试这样做:
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;
}
添加回答
举报