Java 二维ArrayList不断添加新值

Java 二维ArrayList不断添加新值,java,performance,arraylist,Java,Performance,Arraylist,我在Java中发现了二维ArrayList的以下行为: ArrayList<ArrayList<Date>> parentList = new ArrayList<ArrayList<Date>>(); ArrayList<Date> childList = new ArrayList<Date>(); //Adding a date to childList childList.add(date1); //Adding

我在Java中发现了二维ArrayList的以下行为:

ArrayList<ArrayList<Date>> parentList = new ArrayList<ArrayList<Date>>();
ArrayList<Date> childList = new ArrayList<Date>();

//Adding a date to childList
childList.add(date1);

//Adding a 'row' to parentList
parentList.add(childList);

//Adding another date to childList
childList.add(date2);

//Adding another row to parentList
parentList.add(childList);

System.out.println(parentList.get(0));
System.out.println(parentList.get(1));

//Expected output:   
//   [date1]
//   [date1, date2]

//Real output:   
//   [date1, date2]
//   [date1, date2]
应该输出如下内容:

[date1]
[date1, date2]
[date1, date2, date3]
[date1, date2, date3, date4]
etc.

您两次添加相同的
childList
实例。所有操作都在该对象上完成。由于您添加了两次,因此一切都会给人一种发生两次的印象。要解决此问题,请添加childList的副本,如下所示:

ArrayList<ArrayList<Date>> parentList = new ArrayList<ArrayList<Date>>();
ArrayList<Date> childList = new ArrayList<Date>();

//Adding a date to childList
childList.add(date1);

//Adding a 'row' to parentList
parentList.add(new ArrayList<Date>(childList)); // COPY!

//Adding another date to childList
childList.add(date2);

//Adding another row to parentList
parentList.add(new ArrayList<Date>(childList)); // COPY!

System.out.println(parentList.get(0));
System.out.println(parentList.get(1));
ArrayList父列表=新建ArrayList();
ArrayList childList=新建ArrayList();
//将日期添加到子列表
添加(日期1);
//将“行”添加到父列表
parentList.add(新数组列表(子列表));//复制
//将另一个日期添加到childList
添加(日期2);
//将另一行添加到父列表
parentList.add(新数组列表(子列表));//复制
System.out.println(parentList.get(0));
System.out.println(parentList.get(1));

@RohitJain:不,因为列表必须是累积的。所以我也需要第一个元素。
[date1]
[date1, date2]
[date1, date2, date3]
[date1, date2, date3, date4]
etc.
ArrayList<ArrayList<Date>> parentList = new ArrayList<ArrayList<Date>>();
ArrayList<Date> childList = new ArrayList<Date>();

//Adding a date to childList
childList.add(date1);

//Adding a 'row' to parentList
parentList.add(new ArrayList<Date>(childList)); // COPY!

//Adding another date to childList
childList.add(date2);

//Adding another row to parentList
parentList.add(new ArrayList<Date>(childList)); // COPY!

System.out.println(parentList.get(0));
System.out.println(parentList.get(1));