ArrayList<Integer> list1= new ArrayList<>();
ArrayList<Integer> list2= new ArrayList<>();
for(int i=1;i<=5;i++){
list1.add(i);
}
System.out.println("List1 "+list1);
list2=list1;
System.out.println("List2 "+list2 );
list2.add(6);
System.out.println("List1 Changed "+list1 );
输出:
List1 [1, 2, 3, 4, 5]
List2 [1, 2, 3, 4, 5]
List1 Changed [1, 2, 3, 4, 5, 6]
我知道使用list2 = list1,并且在更改list2时,list1也会被更改。但我不希望我的list1改变它。我必须使用list2 = list1,但有没有办法让我只获得List1 [1,2,3,4,5]?
答案 0 :(得分:3)
如果您希望list2
引用与List
不同的list1
,请复制一份:
更改
list2=list1;
到
list2 = new ArrayList<>(list1);
请注意,由于您要覆盖List
引用的原始list2
的引用,因此无需首先创建它:
ArrayList<Integer> list1 = new ArrayList<>();
for(int i = 1; i <= 5; i++) {
list1.add(i);
}
System.out.println("List1 "+list1);
ArrayList<Integer> list2 = new ArrayList<>(list1);
System.out.println("List2 "+list2);
list2.add(6);
System.out.println("List1 Not Changed "+list1);
答案 1 :(得分:1)
list2=list1;
您正在使用list1
引用覆盖list2。如果你想将它们分开,只需添加它们,不要分配
list2.addAll(list1);
答案 2 :(得分:0)
您可以复制列表,而不只是为其分配引用:
list2 = new ArrayList<>(list1);
答案 3 :(得分:0)
list1
和list2
是变量,它们都是ArrayList<Integer>
类型对象的引用。它们在执行list2 = list1
后具有完全相同的值,该值是对象的地址,而不是对象本身。这意味着在您丢失list2
指向的原始列表时,您有两个指向内存中相同位置的变量。
如何保留两个独立的列表,可以添加从list1
到list2
的元素,就像这样
List<Integer> list2 = new ArrayList<>(list1);
或者这个:
List<Integer> list2 = new ArrayList<>();
/*code inbetween*/
list2.addAll(list1);
答案 4 :(得分:0)
ArrayList<Integer> list1= new ArrayList<>();
ArrayList<Integer> list2= new ArrayList<>();
for(int i=1;i<=5;i++){
list1.add(i);
}
System.out.println("List1 "+list1);
list2=(ArrayList<Integer>) list1.clone();
System.out.println("List2 "+list2 );
list2.add(6);
System.out.println("List1 Changed "+list1 );