Я работал над большим проектом и столкнулся с проблемой, которую я воспроизвел здесь гораздо проще. То, что я пытаюсь сделать, - добавить ArrayList из целых чисел в другой ArrayList. Проблема в том, что каждый массив ArrayList, который я добавляю в массив ArrayList, обновляется, как если бы они были одинаковыми.ArrayList of ArrayLists in Recursion
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
Может кто-нибудь объяснить мне, что здесь происходит? И, возможно, предложите работу для такой ситуации.
Хорошо, это имеет смысл. Я не мог окутать голову, почему обновление внутри test1 обновлялось, и предположил, что копия была сделана автоматически. Я немного изменил ваше решение: ArrayList temp = new ArrayList (тест); test1.add (temp); И, похоже, выводят правильные цифры. Спасибо за помощь! –
@DustinLiang Рад помочь. –