List<List<Integer>> resultList=new ArrayList<>();
List<Integer> arr=new ArrayList<>();
resultList.add(arr);
for (int i = 0; i < nums.length; i++) {
List<List<Integer>> list1=new ArrayList<>(resultList);
for (List<Integer> list : list1) {
list.add(nums[i]);
}
resultList.addAll(list1);
}
当list添加了新元素,resultList也会改变,推断在此情况下,泛型为List的时候addAll方法是引用的地址,当一个发生变化,另一个也会变化.
List<List<Integer>> resultList=new ArrayList<>();
List<Integer> arr=new ArrayList<>();
resultList.add(arr);
for (int i = 0; i < nums.length; i++) {
List<List<Integer>> list1=new ArrayList<>(resultList);
for (int j = 0; j < list1.size(); j++) {
List<Integer> l1=new ArrayList<>(list1.get(j));
l1.add(nums[i]);
resultList.add(l1);
}
}
把代码做如上改变,可以实现数组所有子集集合的实现,同样的处理,唯一的变量就是泛型,推断,addAll引用的是地址