我發現在Java中與二維的ArrayList以下行爲:二維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]
如此看來到,即便在childList中已添加到parentList,新增項目到的childList也立即被添加到parentList。
我想出了這個問題,以下解決方案:
ArrayList<ArrayList<Date>> parentList = new ArrayList<ArrayList<Date>>();
ArrayList<Date> childList = new ArrayList<Date>();
ArrayList<Date> cacheList = new ArrayList<Date>();
//Adding a date to childList
childList.add(date1);
//Adding a 'row' to parentList
parentList.add(childList);
//Saving all current dates in cacheList
cacheList = childList;
childList = new ArrayList<Date>();
for (int i = 0; i < cacheList.size(); i++)
{
childList.add(cacheList.get(i));
}
cacheList = new ArrayList<Date>();
//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]
// [date1, date2]
但我發現這個解決方案有點多餘和醜陋。
所以我想知道:這個問題有沒有更優雅的解決方案?
編輯:請注意,我需要childList
累計。所以它應該包含所有元素,但是每次再添加一個元素,然後將其存儲在parentList
中。
例如:
for (int i = 0; i < parentList.size(); i++)
{
System.out.println(parentList.get(i));
}
應該輸出類似:
[date1]
[date1, date2]
[date1, date2, date3]
[date1, date2, date3, date4]
etc.
@RohitJain:不,因爲列表必須是累積的。所以我需要第一個元素。 –