0

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

有人可以向我解释这里发生了什么吗?也许建议解决这种情况。

4

1 回答 1

2

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

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

您可以尝试更换

test1.add(test);

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

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

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

于 2013-08-10T02:22:27.920 回答