Java 在之前定义为相等时使两个列表不相等
我知道在使用list2=list1时,以及在更改list2时,list1也会被更改。但是我不想让我的列表改变。我必须使用list2=list1,但是有没有办法只获取list1[1,2,3,4,5]呢?如果您想Java 在之前定义为相等时使两个列表不相等,java,arrays,list,arraylist,Java,Arrays,List,Arraylist,我知道在使用list2=list1时,以及在更改list2时,list1也会被更改。但是我不想让我的列表改变。我必须使用list2=list1,但是有没有办法只获取list1[1,2,3,4,5]呢?如果您想list2引用与list1不同的列表,请复制: 改变 List1 [1, 2, 3, 4, 5] List2 [1, 2, 3, 4, 5] List1 Changed [1, 2, 3, 4, 5, 6] 到 如果希望list2引用与list1不同的列表,请复制: 改变 List1 [1
list2
引用与list1
不同的列表,请复制:
改变
List1 [1, 2, 3, 4, 5]
List2 [1, 2, 3, 4, 5]
List1 Changed [1, 2, 3, 4, 5, 6]
到
如果希望list2
引用与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
reference覆盖list2。如果您想将它们分开,只需添加它们,而不分配
list2=list1;
您正在使用list1
reference覆盖list2。如果您想将它们分开,只需添加它们,而不分配
list2=list1;
list1
和list2
都是变量,它们都是对类型为ArrayList
的对象的引用。执行list2=list1
后,它们具有完全相同的值,该值是对象的地址,而不是对象本身。这意味着您丢失了list2
指向的原始列表,并且有两个变量指向内存中的同一位置
要保留两个独立的列表,可以将list1
中的元素添加到list2
,如下所示
list2.addAll(list1);
List list2=新的数组列表(list1);
或者这个:
List<Integer> list2 = new ArrayList<>(list1);
List list2=new ArrayList();
/*中间代码*/
列表2.addAll(列表1);
list1
和list2
都是变量,它们都是对类型为ArrayList
的对象的引用。执行list2=list1
后,它们具有完全相同的值,该值是对象的地址,而不是对象本身。这意味着您丢失了list2
指向的原始列表,并且有两个变量指向内存中的同一位置
要保留两个独立的列表,可以将list1
中的元素添加到list2
,如下所示
list2.addAll(list1);
List list2=新的数组列表(list1);
或者这个:
List<Integer> list2 = new ArrayList<>(list1);
List list2=new ArrayList();
/*中间代码*/
列表2.addAll(列表1);
ArrayList列表1=新建ArrayList();
ArrayList list2=新的ArrayList();
for(int i=1;iArrayList list1=new ArrayList();
ArrayList list2=新的ArrayList();
对于(int i=1;我可能会将list1
的克隆分配到list2
中。@Jeroensteenbeek:这里没有向任何方法传递任何内容。@Thilo确实如此,但引用正在更改,因此我认为这可能有助于解释将list1
的克隆分配到list2相反。@JeroenSteenbeeke:这里没有任何东西被传递给任何方法。@Thilo确实如此,但引用正在被更改,所以我认为这可能有助于解释问题。有一个方法可以做同样的事情,而不是创建新的对象@ꜱᴜʀᴇꜱʜᴀᴛᴛᴀ 是的,有,但该语句也用于替换ArrayList list2=new ArrayList();
语句。有一种方法可以执行相同的操作,而不是创建新对象@ꜱᴜʀᴇꜱʜᴀᴛᴛᴀ 是的,有,但该语句也用于替换ArrayList list2=new ArrayList();
语句。
List<Integer> list2 = new ArrayList<>(list1);
List<Integer> list2 = new ArrayList<>();
/*code inbetween*/
list2.addAll(list1);
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 );