只有我添加的最终数组列表被克隆到 2 维 ArrayList 的所有元素。

Only the final Array list I'm adding is cloned to all elements of the 2 Dimensional ArrayList.

我创建了一个程序来说明问题的本质。

我希望最终的 twoDim ArrayList 为 [[a], [a,b], [a,b,c]],其中 a、b 和 c 是字符串。

我想继续编辑临时 ArrayList,当我添加了要临时的字符串后,我想将临时添加到 twoDim。

这是演示代码,您可以取消注释打印以查看过程不同阶段的 twoDim。

    public static void main(String args[])
{
    ArrayList<ArrayList<String>> twoDim = new ArrayList<ArrayList<String>>();

    ArrayList<String> temp = new ArrayList<String>();

    int i=0, j=0;


    //System.out.println(twoDim);
    temp.add("a");
    twoDim.add(temp);
    //System.out.println(twoDim);


    temp.clear();
    //System.out.println(twoDim);
    temp.add("a");
    temp.add("b");
    twoDim.add(temp);
    //System.out.println(twoDim);

    temp.clear();
    //System.out.println(twoDim);
    temp.add("a");
    temp.add("b");
    temp.add("c");
    twoDim.add(temp);


    System.out.println(twoDim);
}

谢谢:)

调用 temp.clear(); 是不够的。您必须为外部 ArrayList 的每个元素创建一个新的 ArrayList 实例。 否则,您的外部 ArrayList 将多次包含相同的内部 ArrayList 实例。

ArrayList<String> temp = new ArrayList<String>();

int i=0, j=0;

//System.out.println(twoDim);
temp.add("a");
twoDim.add(temp);
//System.out.println(twoDim);

temp = new ArrayList<String>();
//System.out.println(twoDim);
temp.add("a");
temp.add("b");
twoDim.add(temp);
//System.out.println(twoDim);

temp = new ArrayList<String>();
//System.out.println(twoDim);
temp.add("a");
temp.add("b");
temp.add("c");
twoDim.add(temp);