gpt4 book ai didi

java - 递归中 ArrayList 的 ArrayList

转载 作者:行者123 更新时间:2023-12-02 06:49:59 25 4
gpt4 key购买 nike

我一直在从事一个更大的项目,并遇到了一个问题,我在这里以更简单的方式复制了该问题。我想做的是将一个整数的 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

有人可以向我解释一下这里发生了什么吗?也许可以建议针对这种情况的解决方法。

最佳答案

您正在添加完全相同的对象testArrayList一遍又一遍地。这就是为什么它们都一起修改的原因。

每次要添加它时,都需要创建一个new ArrayList<Integer>()在添加之前。

您可以尝试更换

test1.add(test);

test = new ArrayList<Integer>(test);
test1.add(test);

这会复制当前测试,然后将其添加到列表中。

这仍然意味着 Integer ArrayList 中包含的元素会表现出相同的错误,因为这是一个浅拷贝,但由于您没有修改它们,所以对于这种情况来说是可以的。

关于java - 递归中 ArrayList 的 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18158076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com