Java の 2 次元 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
累積する必要があることに注意してください。したがって、すべての要素を含める必要がありますが、そのたびにもう 1 つ追加され、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.