只有我正在添加的最终Array列表被克隆到2 Dimensional ArrayList的所有元素。

时间:2015-02-15 08:29:10

标签: java eclipse arraylist

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

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

我想继续编辑temp ArrayList,当我添加了我想要的字符串temp时,我想将temp添加到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);
}

谢谢:)

1 个答案:

答案 0 :(得分:2)

调用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);