Java ArrayList<;ArrayList>&燃气轮机;由正在添加的ArrayList备份
我正在创建一个Java ArrayList<;ArrayList>&燃气轮机;由正在添加的ArrayList备份,java,arraylist,collections,Java,Arraylist,Collections,我正在创建一个ArrayList的ArrayList,并向其中添加ArrayLists。但是每次我对ArrayList进行更改时,它都会反映在ArrayList中 例如: List list1=new ArrayList(); List list2=新的ArrayList(); 清单2.添加(“Cat”); 列表1.添加(列表2)//没问题 清单2.clear(); 清单2.添加(“狗”); 列表1.添加(列表2)//问题这次猫被两只狗取代了!! 如何确保对list2的更新不会反映在list1
ArrayList
的ArrayList
,并向其中添加ArrayLists
。但是每次我对ArrayList
进行更改时,它都会反映在ArrayList
中
例如:
List list1=new ArrayList();
List list2=新的ArrayList();
清单2.添加(“Cat”);
列表1.添加(列表2)//没问题
清单2.clear();
清单2.添加(“狗”);
列表1.添加(列表2)//问题这次猫被两只狗取代了!!
如何确保对
list2
的更新不会反映在list1
中?我从以下等效但可运行的程序中观察到的内容:
import java.util.List;
import java.util.ArrayList;
public class Test1 {
public static void main(String[] args){
List<ArrayList<String>> list1 = new ArrayList<ArrayList<String>>();
ArrayList<String> list2 = new ArrayList<String>();
list2.add("Cat");
System.out.println(list2);
list1.add(list2);
System.out.println(list1);
list2.clear();
System.out.println(list2);
list2.add("Dog");
System.out.println(list2);
list1.add(list2);
System.out.println(list2);
System.out.println(list1);
if(list1.get(0) == list1.get(1)) {
System.out.println("Lists at position 0 and 1 are the same");
}
}
}
而不是清除列表2并再次添加它
请同时查看以下文章:
简短的回答。。。替换
list2.clear();
与
list2=newarraylist();
出现此问题的原因是list1.add(list2)
将对list2的引用添加到list1
。它不会在任何时候复制list2
所指的列表。因此,您最终会将对同一列表对象的多个引用添加到list1
这是Java参数传递工作方式的结果,也是集合API设计工作方式的结果。被否决,因为我不清楚您的第一句话“但每次我更改ArrayList时,它都会反映在ArrayList中”。此外,如果您使用的是IDE(Eclipse或Intellij),它应该在以下语句中给出一个错误List list1=new ArrayList()代码>…谢谢Stephen和nbro,@nbro,不,它没有给我list1=new ArrayList()的错误;。。。你为什么这么认为?我实际上是在创建对象的ArrayList,而不是字符串。我举了一个例子
ArrayList<String> list3 = new ArrayList<String>();
list3.add("Dog");
list1.add(list3);
list2.clear();
list2 = new ArrayList<String>();