【问题标题】:Java ArrayList of ArrayLists behaving weird when adding objects [duplicate]添加对象时,ArrayLists的Java ArrayList表现奇怪[重复]
【发布时间】:2016-06-04 19:03:26
【问题描述】:

我正在尝试将对象(在此示例中以使其保持简单的字符串)添加到 Arraylist,这些对象作为 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) 将“test”字符串附加到所有子列表中,以便在每个循环中添加一次?我不明白。你能帮我修复我的代码以实现后者的输出吗?提前谢谢你。

【问题讨论】:

  • 不要打电话给dummylistlist.add(dummylist); 因为这个,你只有一个列表,叫dummylist
  • 您在“listlist”中添加了两次相同的列表,因此,在dummylist 中添加了两次“test”。

标签: java arraylist add


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-12
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      • 2016-08-10
      • 2015-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多