Java ArrayList of ArrayLists在添加对象时表现得很奇怪



我正在尝试将对象(在此示例中保持简单的字符串)添加到数组列表中,这些对象被收集为数组列表。这是代码:

    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) 方法将"test"字符串附加到所有子列表,以便每次循环添加一次?我不明白。你能帮我修复我的代码以实现后一个输出吗?提前谢谢你。

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

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

相关内容