在二维ArrayList中添加元素

7

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

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

如何使用ArrayList实现相同的功能?

@Joey:你有什么疑问吗?请查看答案中使用了 get(...).get(...) 的代码。这如何驳斥我上面的评论? - Hovercraft Full Of Eels
1
无论 get(1) 返回什么,将其赋值为17都不会将其添加到列表中 - 而且肯定也无法编译通过,对吧? - DNA
1
@Joey:没错,你说得对,我当时没想清楚。现在我的酒精含量可能还不够高。 - Hovercraft Full Of Eels
6个回答

10
myList.get(0).set(1, 17);
也许吗?
这假设一个嵌套的 ArrayList,即:
ArrayList<ArrayList<Integer>> myList;

我要挑剔一下你选择的词语:这个操作是向内部列表中的特定位置赋值,而不是添加值。但是你的示例代码也是这样做的,因为数组的大小是固定的,所以你必须按照正确的大小创建它们,然后将值分配给各个元素插槽。

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


1
我很高兴詹姆斯·高斯林(James Gosling)鄙视了运算符重载。 - Oliver Charlesworth
2
...其中get(0)返回一个列表,当然。还要注意的是17会自动装箱为new Integer(17) - DNA

3
outerList.get(0).set(1, 17);

外部列表outerList是一个List<List<Integer>>

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


2
 ArrayList<ArrayList<String>> data = new ArrayList<ArrayList<String>>();
 data.add(new ArrayList<String>());
 data.get(0).add("String");

ArrayList<ArrayList<String>> 包含类型为 ArrayList<String> 的元素

每个元素都必须被初始化

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

要从 3 行示例中获取字符串 "String",您可以使用

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

1

我发现最方便的方法是声明一个二维ArrayList,然后再声明一个普通的单维数组。

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

然后填充'1D'数组列表,并将1D添加到2D数组列表中。
1darraylist.add("string data");
2darraylist.add(idarraylist);

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


1
ArrayList<ArrayList<Integer>> FLCP = new ArrayList<ArrayList<Integer>>();
FLCP.add(new ArrayList<Integer>());
FLCP.get(0).add(new Integer(0));

每个元素都必须被实例化。在这里,外部的ArrayList有ArrayList元素,首先需要添加一个元素以使用get方法引用它。
一些额外的注意事项;在阅读其他答案和评论后:
1> 每个元素必须被实例化; 初始化与实例化不同(参见flexJavaMysqlanswer
2> 在Java中,存在二维数组; C#没有二维数组(参见JB Nizetanswer

0
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));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接