2D ArrayList的放置

5

我想在下面的代码中使用ArrayList而不是数组:

for(int k=0;k<SIZE;k++) //size is 9
    for(int j=0;j<SIZE;j++)
        ar1[k][j] = buttons[k][j].getText();

我猜ArrayList应该是这个样子的:

那么以下就是 ArrayList 的内容:

ArrayList<ArrayList<String>>ar1 = new ArrayList<ArrayList<String>>();

但是这很令人困惑, 因为我不能使用get方法... 我不知道该怎么做。

4个回答

2

尝试这个方法

List<List<String>>ar1 = new ArrayList<>();
//lets say we want to have array [2, 4]
//we will initialize it with nulls
for (int i=0; i<2; i++){
    ar1.add(new ArrayList<String>());
    for(int j=0; j<4; j++)
        ar1.get(i).add(null);
}
System.out.println("empty array="+ar1);

//lets edit contend of that collection
ar1.get(0).set(1, "position (0 , 1)");
ar1.get(1).set(3, "position (1 , 3)");
System.out.println("edited array="+ar1);

//to get element [0, 1] we can use: ar1.get(0).get(1)
System.out.println("element at [0,1]="+ar1.get(0).get(1));

输出:

empty array=[[null, null, null, null], [null, null, null, null]]
edited array=[[null, position (0 , 1), null, null], [null, null, null, position (1 , 3)]]
element at [0,1]=position (0 , 1)

2

试试这个:ar1.get(k).get(j)

第一个get()获取索引为k的ArrayList;第二个get()获取您想要的字符串。

如果您想在[k, j]位置设置字符串,可以使用ar1.get(k).set(j, str)。当然,ar1.get(k)不能为空。您需要像ar1.add(new ArrayList<String>());这样添加或设置一个ArrayList以在该索引处使用ArrayList。

类似地,如果该ArrayList元素不足,您可以使用ar1.get(k).add(str)将str添加到索引k处的ArrayList末尾。


但我需要将一个值插入ArrayList中。ar1.get(k).get(j).add(something)不可行。 - Imri Persiado
ar1.get(k).set(j, something); - tckmn
或者使用 ar1.get(k).add(something); 来添加一个项目。 - tckmn
我认为你不能使用get方法,因为它是一个空数组,它会返回null。而你的建议给了我这个错误:“AWT-EventQueue-0”线程中的异常java.lang.IndexOutOfBoundsException:索引:0,大小:0。 - Imri Persiado

1

在声明 ArrayList 时,使用 List 类型始终是一个好习惯。因此,不要使用

ArrayList<ArrayList<String>>ar1 = new ArrayList<ArrayList<String>>();

使用

List<List<String>>ar1 = new ArrayList<List<String>>();

您可以通过 .add(element) 方法轻松地向数组列表中添加元素。阅读永远有用的 javadoc 以获取完整的列表方法列表。当然,一开始它是空的。要开始填充它,您需要创建一个一维数组列表

List<String> a = new ArrayList<String>()
a.add("element");

请将这个一维数组列表添加到你的二维数组列表中。
ar1.add(a);

要在二维列表中插入元素,您必须访问您想要插入的一维数组列表的位置,然后执行.add(String)
ar1.get(0).add("newly added element"); //will get the first list then append the string to that list

同样地,获取二维列表中的元素

ar1.get(0).get(0); //will get the first lis then get the first element of the pulled list

这是我目前拥有的,但如果我在索引4处插入一个值,然后在索引1处插入一个值,原本在索引4处的值现在就被向下推了!编辑-使用set而不是add进行覆盖,如果您确切地知道将要有多少个值,则非常好。 - FredoAF

0

一个二维数组可能是更好的抽象方式,但如果您出于其他原因想要创建一个ArrayList of ArrayLists,也可以实现。只需记住,在添加行中的元素之前,需要先添加行本身。

//Initialize the rows
ArrayList<ArrayList<String>> ar1 = new ArrayList<ArrayList<String>>
for (int i=0; i<SIZE; i++) {
    ar1.add(new ArrayList<String>());
    for (int j=0; j<SIZE; j++) {
        ar1.get(i).set(j, "");
    }
}

//Now setting a value works
ar1.get(row).set(column, value);

//As does getting one
String s = ar1.get(row).get(column);

我收到了一个异常:“AWT-EventQueue-0” java.lang.IndexOutOfBoundsException:Index: 0,Size: 0,针对于这一行代码:ar1.get(i).set(j, ""); 这很奇怪。 - Imri Persiado

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