所以我试图创建一个具有一定数量ArrayLists的二维ArrayList,然后每个ArrayLists都可以包含所需的数量。我知道数组动态地改变了大小,但我想保证在这种情况下它至少有一定的大小。
ArrayList<ArrayList<Integer>> integers = new ArrayList<ArrayList<Integer>>(10);
这不起作用。我希望能够将新Integer的位置设置为第一个维度索引之一,如下所示:
integers.get(7).add(new Integer(42));
这只是给了我一个IndexOutOfBoundsException,好像ArrayList中没有Integer ArrayLists。有没有办法做到这一点?我确信这是我看不到的简单事。
答案 0 :(得分:3)
数组列表不能像这样工作。它们不是数组。
您创建的列表由至少10个元素的数组支持,但它本身不包含任何元素,因此您不能引用第7个元素或实际上任何一个元素。
integers.size() would return 0
integers.isEmpty() would return true
integers.get(0) would throw
此外,您初始化的列表需要自己填充列表:
for (int i = 0; i < 10; ++i) {
row = new ArrayList<Integer>()
integers.add(row);
}
// now integers is a 10-element list of empty lists
或者你可以使用原始数组(如果你想拥有一个固定大小的矩形)。
int integers[][] = new int[10][];
for (int i = 0; i < integers.length; ++i) {
integers[i] = new int[10]; // rows are initialized to 0, as int is primitive
}
for (final int[] arr : integers) {
System.out.println(Arrays.toString(arr));
}
答案 1 :(得分:0)
您可以使用嵌套循环。这是一个简短的例子:
import java.util.ArrayList;
public class PopulateArray {
public static void main(String[] args) {
ArrayList<ArrayList<Integer>> integers = new ArrayList<ArrayList<Integer>>();
int num_arrays_ to_populate = 10;
int num_indices_to_populate = 10;
for(int i = 0; i < num_arrays_to_populate; i++) {
integers.add(new ArrayList<Integer>());
for(int j = 0; j < num_indices_to_populate; j++) {
integers.get(i).add(0);
}
}
}
}
这将创建一个intl的ArrayLists的ArrayList,并用10个ArrayLists填充顶部的ArrayList,并在每个的前10个单元格中放置0。显然你可以改变任何这些数字来做你想做的事情。
注意/免责声明:我在手机上写了这个,所以如果我错过了大括号或分号,只需发表评论,我就会添加它。但逻辑在那里。