Java 代码片段未按预期工作:使用 ArrayList<ArrayList<Integer>>

Java code snippet not working as expected: Using ArrayList<ArrayList<Integer>>

当前 newResult 正在获取值:[[0, 0, 1], [0, 0, 1], [0, 0, 1], [0, 0, 1]]

我正在尝试获取 [[0, 0], [1, 0], [0, 1], [1, 1]] 基本上,作为一个基本案例,结果,我将 [[0], [1]] 然后我尝试向其中添加元素,通过将结果复制到 newResult 两次,然后在前半部分附加 0,在后半部分附加 1。

我也在使用 clone(),但无法解决问题

import java.util.ArrayList;

public class ArrayListNestedTest {
    public static void main(String[] args) {
        ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
        ArrayList<ArrayList<Integer>> newResult = new ArrayList<ArrayList<Integer>>();
        ArrayList<Integer> zero = new ArrayList<Integer>();
        zero.add(0);
        ArrayList<Integer> one = new ArrayList<Integer>();
        one.add(0);
        result.add(zero);
        result.add(one);
        ArrayList<ArrayList<Integer>> tmp1 = new ArrayList<ArrayList<Integer>>();
        ArrayList<ArrayList<Integer>> tmp2 = new ArrayList<ArrayList<Integer>>();
        tmp1 = (ArrayList<ArrayList<Integer>>) result.clone();
        tmp2 = (ArrayList<ArrayList<Integer>>) result.clone();
        newResult.addAll(tmp1);
        newResult.addAll(tmp2);
        newResult.get(0).add(0);
        newResult.get(1).add(0);
        newResult.get(2).add(1);
        newResult.get(3).add(1);
        System.out.println("Hi");
    }
}

谢谢

请更简要地描述一下您的任务。看起来你做了太多的动作。例如:是否绝对有必要进行克隆?

感谢@Holger comment. I have changed double curly braces for initializer new ArrayList<Integer>(){{add(0);}} to new ArrayList<>(Arrays.asList(0)) because it is strongly discouraged

简单的解决方案可能是这个:

    List<List<Integer>> newResult = new ArrayList<>();
    newResult.add(new ArrayList<>(Arrays.asList(0)));
    newResult.add(new ArrayList<>(Arrays.asList(1)));
    newResult.add(new ArrayList<>(Arrays.asList(0)));
    newResult.add(new ArrayList<>(Arrays.asList(1)));

    newResult.get(0).add(0);
    newResult.get(1).add(0);
    newResult.get(2).add(1);
    newResult.get(3).add(1);

    System.out.println(newResult);