[英]Adding a array list to arraylist
import java.util.*;
class test2{
static void fun(int i,int arr[],List<Integer> l,int n,List<List<Integer>> res){
if(i==n){
if(l.size()!=0){
//System.out.println(l.size());
res.add((l));
//System.out.println(res);
}
//System.out.println(l);
return;
}
l.add(arr[i]);
fun(i+1,arr,l,n,res);
//System.out.println(l);
l.remove(l.size()-1);
//System.out.println(l);
fun(i+1,arr,l,n,res);
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int arr[]=new int[n];
for(int i=0;i<n;i++){
arr[i]=sc.nextInt();
}
List<Integer> l=new ArrayList<>();
List<List<Integer>> res=new ArrayList<>();
fun(0,arr,l,n,res);
System.out.println(res);
}
}
在有趣的 function 中,当我将一个列表添加到其他列表时,它正在添加空列表我可以找到原因有人可以帮助我这个程序是关于找到给定数组的不同组合
您可以使用res.add((new ArrayList<>(l))
而不是res.add((l))
。
当您更新任何原始值然后放入列表中时,您可以再次更新该原始值。 这不会更改列表中的值。 但是 object 不是那样工作的。 好吧,我们可以说它会导致某种指针。 当您更新 object 时,它会更新其地址中的值。 让我给你看一个简短的例子。
public class MyObject {
private List<String> list = new ArrayList<>();
public MyObject() {
list.add("added in Constructor");
}
public List getList() {
return list;
}
}
public static void main(String[] args) {
MyObject myObject = new MyObject();
System.out.println("--> Object list (Before added anything in main) : ");
myObject.getList().forEach(System.out::println);
List list = myObject.getList();
list.add("added in Main");
System.out.println("--> local list : ");
list.forEach(System.out::println);
System.out.println("--> Object list (After added a value in main) : ");
myObject.getList().forEach(System.out::println);
}
输出是:
--> Object list (Before added anything in main) :
added in Constructor
--> local list :
added in Constructor
added in Main
--> Object list (After added a value in main) :
added in Constructor
added in Main
我没有设置新的 Arraylist 或创建新的,但我在 MyObject 中的私人列表已更新,即使我只是在主 function 中进行更改。
但是如果我返回new Array<>(list)
而不是list
,那么即使我在 main 中更新列表,我的列表也永远不会改变。 因为我用new Array<>(list)
返回了另一个地址。 所以你应该用另一个地址添加你的列表。 我的意思是另一个 Arraylist。所以你可以使用res.add((new ArrayList<>(l))
而不是res.add((l))
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.