【问题标题】:Add an arraylist to 2d arraylist in java [duplicate]在java中将arraylist添加到二维arraylist [重复]
【发布时间】:2017-03-11 08:24:18
【问题描述】:

我有一个二维数组列表,我想用几个一维数组列表填充它。我的代码如下:

ArrayList<ArrayList<String>> array = new ArrayList<ArrayList<String>>(); 
ArrayList<String> list = new ArrayList<String>();

while (ts2.next()) {
    list.add( ts2.getString("userName");
    list.add(ts2.getString("userId"));  
    array.add(list);
    list.clear();
}

我注意到list.clear() 删除了list 中的元素,但也删除了array 中的元素。最后,arraylist 都是空的。如何在array中添加列表并在array.add(list)之后清除list

【问题讨论】:

    标签: java arrays string list arraylist


    【解决方案1】:

    你可以克隆列表:

    array.add(list.clone());
    

    或者您可以在循环本身内实例化列表对象:

        ArrayList<ArrayList<String>> array = new ArrayList<ArrayList<String>>(); 
    
        while (ts2.next()) {
            ArrayList<String> list = new ArrayList<String>();
            list.add( ts2.getString("userName");
            list.add(ts2.getString("userId"));  
            array.add(list);
        }
    

    那么你甚至不需要清除它。

    【讨论】:

    • 我收到此消息:ArrayList> 类型中的方法 add(ArrayList) 不适用于参数 (Object)
    • 尝试将对象转换为数组列表:array.add((ArrayList&lt;String&gt;)list.clone());
    • array.add(list.clone());不工作
    • @adeeliqbal 不知道为什么它不起作用。您正在将一个数组列表添加到一个数组列表的数组列表中。
    【解决方案2】:

    你可以这样做:

        ArrayList<String[]> arr = new ArrayList<String[]>();
        String[] str = new String[2];
        while (ts2.next()) {
            str[0] = ts2.getString("userName");
            str[1] = ts2.getString("userId");  
            arr.add(str);
        }
    

    如果你也想要一个数组列表:

        ArrayList<ArrayList<String>> arr = new ArrayList<ArrayList<String>>();
        while (ts2.next()) {
            ArrayList<String> arrString = new ArrayList<String>();
            arrString.add(ts2.getString("userName"));
            arrString.add(ts2.getString("userId"));  
            arr.add(arrString);
        }
    

    【讨论】:

      【解决方案3】:

      您可以创建ArrayList&lt;&gt; 的新实例以添加到现有实例中。

      while (ts2.next()) {
          List<String> list = new ArrayList<>();
          list.add(ts2.getString("userName"));
          list.add(ts2.getString("userId"));  
          array.add(list);
      }
      

      但更好的方法是将这些值映射到类的新实例中。

      List<MyClass> = new ArrayList<>();
      
      while (ts2.next()) {
          MyClass i = new MyClass(ts2.getString("userName"), ts2.getString("userId"));
          array.add(i);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-19
        • 1970-01-01
        • 2012-03-21
        • 2013-05-19
        • 1970-01-01
        • 2015-03-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多