添加对象时,ArrayLists的Java ArrayList表现得很奇怪

时间:2016-06-04 19:03:27

标签: java arraylist add

我试图将对象(在此示例中为了保持简单的字符串)添加到Arraylists,它们被收集为Arraylist。这是代码:

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

    for (int j=0; j< 2; j++){
      dummylistlist.add(dummylist);
      String text = "test";
      dummylistlist.get(j).add(text);
    }

    for (int j=0; j< 2; j++){
      System.out.println("arraylist "+j+" has size "+dummylistlist.get(j).size());
      System.out.println("Arraylist No."+j+" is ="+dummylistlist.get(j));
    }
}

输出是:

arraylist 0 has size 2
Arraylist No.0 is =[test, test]
arraylist 1 has size 2
Arraylist No.1 is =[test, test]

但我希望它是:

arraylist 0 has size 1
Arraylist No.0 is =[test]
arraylist 1 has size 1
Arraylist No.1 is =[test]

为什么方法add(text)会附加&#34; test&#34;字符串到所有子列表,以便每次循环添加一次?我不明白。你能帮我修改我的代码来实现后一种输出吗?提前谢谢。

2 个答案:

答案 0 :(得分:0)

问题是你只创建了一个列入另一个列表的列表。因此,在调用get(j)时,您总是检索相同的内部列表并向其添加元素。如果您需要不同的列表,请在循环内创建它们。

答案 1 :(得分:0)

如果您希望它工作,您需要在dummylist循环内初始化for变量 由于代码中只有一个dummylist实例,因此它与您在每次循环迭代时添加的引用相同。这就是为什么你需要在每次循环迭代时创建ArrayList的新实例