【问题标题】:How to repeatedly add to ArrayList<ArrayList<String>> using a loop and only one other ArrayList<String>? [duplicate]如何使用循环重复添加到 ArrayList<ArrayList<String>> 并且仅使用另一个 ArrayList<String>? [复制]
【发布时间】:2019-11-28 22:33:16
【问题描述】:

我是 Java 新手,我想要一个 ArrayList (mainList) of ArrayLists of Strings,其中包含未知数量的字符串集,只能作为单个字符串提取,而不是作为一个列表一起提取。

我的想法是重复地将一个集合的每个字符串附加到一个 ArrayList (list2),将 list2 附加到 mainList 的末尾,然后清空 ArrayList,然后将下一个集合的每个字符串附加到 list2,附加那个,为空列表,重复。我已经包含了一个我尝试执行的示例:

    private ArrayList<ArrayList<String>> mainList = new ArrayList<>();

    private ArrayList<String> list2 = new ArrayList<>();



for (int i = 0; i < items.size(); i++){

     for (int j = 0; j < items.get(i).innerItem.size(); j++){

          list2.add(items.get(i).innerItem.get(j).string);
     }

     mainList.add(list2);

     list2.clear();
}

假设有 2 个项目,innerItem 1 带有字符串“haha”和“hehe”,innerItem2 带有字符串“chuckle”和“what”

mainList 然后里面有两个list,都是“chuckle”和what”

mainList 最终有多个相同数组的列表:附加的最后一个列表。 Clear 函数似乎清除了附加的 list2 和 mainList 部分。如何使列表保持不同?提前致谢!

【问题讨论】:

  • 添加示例输入和您的预期输出。

标签: java android


【解决方案1】:

list2 是一个对象,与所有对象一样,它的作用类似于引用类型。这意味着如果您将list2 附加到mainList,然后清除list2,这也将清除您刚刚附加到mainList 的列表。当您随后更改list2 以保存其他值时,它也会更改mainList. 中附加列表的内容

最后,您已经多次附加了list2,并且每次都只是引用与原始list2 对象相同的内存地址。因此,它们都是一样的。

要解决此问题,您可以创建list2 的克隆并附加该克隆而不是list2 本身,或者通过构造每次迭代将list2 覆盖为新列表。

选项 1:

mainList.add(new ArrayList<>(list2));
list2.clear();

选项 2:

mainList.add(list2);
list2 = new ArrayList<>();

【讨论】:

    【解决方案2】:

    您目前将一个ArrayList&lt;String&gt; list2 添加到mainList 中多次,因为它始终保持同一个对象,并且它保持为空,因为您每次到达循环末尾时清除list2

    如果我正确理解您的问题,您的问题应该可以使用以下代码解决:

    private ArrayList<ArrayList<String>> mainList = new ArrayList<>();
    
    for (int i = 0; i < items.size(); i++) {
         ArrayList<String> list2 = new ArrayList<>();
         for (int j = 0; j < items.get(i).innerItem.size(); j++) {
              list2.add(items.get(i).innerItem.get(j).string);
         }
         mainList.add(list2);
    }
    

    现在为您的 items-List 的每个条目创建一个新的 ArrayList 并添加到 mainList

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      • 2015-12-07
      • 2018-08-19
      • 2014-04-12
      • 1970-01-01
      • 2013-09-13
      • 2014-07-22
      相关资源
      最近更新 更多