【问题标题】:Adding element in two dimensional ArrayList在二维 ArrayList 中添加元素
【发布时间】:2012-03-21 23:30:06
【问题描述】:

我知道对于数组,您可以通过这种方式在二维数组中添加元素:

 array[0][1] = 17; //just an example

如何使用 ArrayList 做同样的事情?

【问题讨论】:

  • @Joey:你怀疑什么?请参阅答案中的代码,因为它使用 get(...).get(...)。这怎么不允许我在上面发表评论?
  • 无论 get(1) 返回什么,分配 17 都不会将其添加到列表中 - 并且肯定不会编译?
  • @Joey:是的,你是对的,我没想到。我的酒精系统现在肯定没有足够的血液。

标签: java multidimensional-array arraylist


【解决方案1】:
 ArrayList<ArrayList<String>> data = new ArrayList<ArrayList<String>>();
 data.add(new ArrayList<String>());
 data.get(0).add("String");

ArrayList&lt;ArrayList&lt;String&gt;&gt; 包含ArrayList&lt;String&gt; 类型的元素

每个元素都必须初始化

这些元素包含String类型的元素

要取回 3 行示例中的 String "String",您可以使用

String getValue = data.get(0).get(0);

【讨论】:

    【解决方案2】:
    String[] myList = {"a","b","c","d"};
    ArrayList<ArrayList<String>> data = new ArrayList<ArrayList<String>>();
    data.add(new ArrayList<String>());
    int outerIndex =0;
    int innerIndex =0;
    for (int i =0; i<list.length; i++) {
         data.get(outerIndex).add(innerIndex, list[i]);
         innerIndex++;
     }
    System.out.println(data);
    

    将数据添加到多维数组的简单 for 循环。
    对于您需要添加的每个外部索引

    data.add(new ArrayList<String>());
    

    然后增加外部索引,并重置内部索引。
    看起来像这样。

    public static String[] myList = {"a", "b","-","c","d","-","e","f","-"};
    
    public static ArrayList<ArrayList<String>> splitList(String[] list) {
    
        ArrayList<ArrayList<String>> data = new ArrayList<ArrayList<String>>();
        data.add(new ArrayList<String>());
        int outerIndex =0;
        int innerIndex =0;
        for (int i=0; i<list.length; i++) {
            System.out.println("will add: " + list[i]);
            if(!list[i].contains("-")) {
                System.out.println("outerIndex: " + outerIndex +" innerIndex: "+ innerIndex);
                data.get(outerIndex).add(innerIndex, list[i]);
                innerIndex++;
            } else {
                outerIndex++;    // will move to next outerIndex
                innerIndex = 0;  // reset or you will be out of bounds
                if (i != list.length-1) {
                    data.add(new ArrayList<String>());  // create an new outer index until your list is empty
                }
            }
       }  
        return data;
    }
    public static void main(String[] args) {
        System.out.println(splitList(myList));
    }
    

    【讨论】:

      【解决方案3】:
      ArrayList<ArrayList<Integer>> FLCP = new ArrayList<ArrayList<Integer>>();
      FLCP.add(new ArrayList<Integer>());
      FLCP.get(0).add(new Integer(0));
      

      每个元素都必须被实例化。这里外层的 ArrayList 有 ArrayList 元素,首先你需要添加一个元素来使用 get 方法引用它。

      一些附加说明;阅读其他答案和 cmets 后:

      1> 每个元素都必须实例化;初始化不同于实例化(参考flexJavaMysqlanswer

      2> 在 Java 中,确实存在二维数组。 C#没有二维数组(参考JB Nizetanswer

      【讨论】:

        【解决方案4】:

        我发现对我来说最好和最方便的方法是声明你的二维数组列表,然后声明一个正常的一维数组。

        ArrayList<ArrayList<String>> 2darraylist = new ArrayList<>();
        ArrayList<String> 1darraylist=new ArrayList<>();
        

        然后填充“一维”数组列表,稍后将一维添加到二维数组列表中。

        1darraylist.add("string data");
        2darraylist.add(idarraylist);
        

        只要您的问题只是将元素添加到列表中,这将起作用。如果您想将它们添加到列表中的特定位置,则 .get().set();是你想要坚持的。

        【讨论】:

          【解决方案5】:
          myList.get(0).set(1, 17);
          

          也许?

          这假定一个嵌套的ArrayList,即

          ArrayList<ArrayList<Integer>> myList;
          

          并选择您选择的单词:这分配一个值到内部列表中的特定位置,它不会添加一个。但是您的代码示例也是如此,因为数组的大小是固定的,因此您必须以正确的大小创建它们,然后将值分配给各个元素插槽。

          如果你真的想添加一个元素,那当然是.add(17),但这不是你的代码所做的,所以我选择了上面的代码。

          【讨论】:

          • 我很高兴 James Gosling 蔑视运算符重载。
          • ...当然,get(0) 返回一个列表。还要注意 17 被自动装箱为new Integer(17)
          【解决方案6】:
          outerList.get(0).set(1, 17);
          

          outerList 是 List&lt;List&lt;Integer&gt;&gt;

          请记住,二维数组不存在。它们实际上是数组或数组。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2014-04-08
            • 2014-10-03
            • 2017-03-11
            • 2017-08-27
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多