私はより大きなプロジェクトに取り組んでおり、ここでより簡単な方法で再現した問題に遭遇しました。私がやろうとしているのは、Integers の ArrayList を別の ArrayList に追加することです。問題は、より大きな ArrayList に追加するすべての ArrayList が、すべて同じであるかのように更新されることです。
public class RecursionTest {
static ArrayList<Integer> test = new ArrayList<Integer>();
static ArrayList<ArrayList<Integer>> test1 = new ArrayList<ArrayList<Integer>>();
public static void testRecurse(int n) {
test.add(n);
if (n % 2 == 0) {
test1.add(test);
}
if (n == 0) {
for (ArrayList<Integer> a : test1) {
for (Integer i : a) {
System.out.print(i + " ");
}
System.out.println();
}
return;
}
testRecurse(n - 1);
}
public static void main(String[] args) {
testRecurse(10);
}
}
私が得る出力は次のとおりです。
10 9 8 7 6 5 4 3 2 1 0
10 9 8 7 6 5 4 3 2 1 0
10 9 8 7 6 5 4 3 2 1 0
10 9 8 7 6 5 4 3 2 1 0
10 9 8 7 6 5 4 3 2 1 0
10 9 8 7 6 5 4 3 2 1 0
それがいつあるべきか:
10
10 9 8
10 9 8 7 6
10 9 8 7 6 5 4
10 9 8 7 6 5 4 3 2
10 9 8 7 6 5 4 3 2 1 0
誰かがここで何が起こっているのか説明できますか? そして、おそらくそのような状況の回避策を提案してください。