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

标签 java eclipse 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);

关于java - 只有我添加的最终数组列表被克隆到二维数组列表的所有元素。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28524293/

相关文章:

java - 为什么\n 和 (String)System.getProperty ("line.separator");采取不同的行动?

java - JDBC 使 Java 崩溃

java - Netbeans 将服务-> 服务器中的信息存储在哪里?

eclipse - 如何在 Mac 上 -clean 启动 STS?

java - 如何从不同的 Maven 项目运行 Eclipse 中的主类?

arrays - couchdb 搜索或过滤键数组

java - 为什么处理排序数组比处理未排序数组更快?

java - Eclipse Spring Bean创建错误

vb.net - 在 VB.NET 中将 ArrayList 数据绑定(bind)到 ListBox?

android - 如何在主线程中将 ListView、ArrayList、ArrayAdapter 和 notifyDataSetChanged 与可运行对象和消息处理程序一起使用