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<String>>ar1 = new ArrayList<ArrayList<String>>();

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

4

4 回答 4

2

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

第一个get()在 index 处获取 ArrayList k;第二个get()得到你想要的字符串。

如果要将字符串设置为[k, j],可以使用ar1.get(k).set(j, str)。当然,ar1.get(k)不能为空。您必须ar1.add(new ArrayList<String>());在第一次使用该索引处的 ArrayList 时添加或设置 ArrayList。

ar1.get(k).add(str)同样,如果 ArrayList 的元素太少,您可以使用将 str 添加到索引 k 处的 ArrayList 末尾。

于 2012-12-11T01:15:34.580 回答
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)
于 2012-12-11T01:33:38.393 回答
1

List声明时使用类型总是一个好习惯ArrayList。所以而不是

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

利用

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

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

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
于 2012-12-11T01:41:43.373 回答
0

二维数组可能是一个更好的抽象,但如果您出于其他原因确实想制作一个 ArrayList 的 ArrayList,则可以这样做。请记住,在将元素添加到行之前,您需要添加行本身。

//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);
于 2012-12-11T01:32:51.790 回答