如何设置二维ArrayList的大小?

时间:2017-10-04 03:08:48

标签: java

所以我试图创建一个具有一定数量ArrayLists的二维ArrayList,然后每个ArrayLists都可以包含所需的数量。我知道数组动态地改变了大小,但我想保证在这种情况下它至少有一定的大小。

ArrayList<ArrayList<Integer>> integers = new ArrayList<ArrayList<Integer>>(10);

这不起作用。我希望能够将新Integer的位置设置为第一个维度索引之一,如下所示:

integers.get(7).add(new Integer(42));

这只是给了我一个IndexOutOfBoundsException,好像ArrayList中没有Integer ArrayLists。有没有办法做到这一点?我确信这是我看不到的简单事。

2 个答案:

答案 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。显然你可以改变任何这些数字来做你想做的事情。

注意/免责声明:我在手机上写了这个,所以如果我错过了大括号或分号,只需发表评论,我就会添加它。但逻辑在那里。