设置ArrayList <arraylist <string>&gt; </arraylist <string>的大小/尺寸

时间:2014-04-25 21:49:59

标签: java arraylist

问题

我有ArrayListArrayList个。我将一个复制到另一个,除了以不同的顺序(元素旋转180°,但这并不重要)。

我有这个通用代码:

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

for (int r = 0; r < 4; r++) {
    for (int c = 0; c < 5; c++) {
        list.get(r).set(c, "an element from the other list");
    }
}

我随意使用尺寸4表示行数,5表示列数。

但是,这会引发索引超出范围错误,显然是因为我没有ArrayList<ArrayList<String>>的维度。

我知道在创建ArrayListyou can give it an initial capacity for a constructor parameter时。但是,我不知道如何应用它:

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

这不会编译,但这基本上就是我想要的:

ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>(5)>(4);

我的平庸解决方案

为了在我尝试复制列表之前给矩阵一些维度,我只是迭代了我想要的行数,并添加了我想要每行的列数大小的列表。

我使用了一个常规数组并将其转换为ArrayList只是为了使元素的默认值为null,因此会影响大小。

for (int r = 0; r < 4; r++) {
    // list.add( new ArrayList<String>(5) ); // doesn't work
    list.add( new ArrayList<String>( Arrays.asList(new String[5]) ) );
}

因此适用于设置大小,因为有足够的元素将被添加到矩阵中,但它不是首选的解决方案。


问题

有没有办法在初始化期间设置ArrayList ArrayList的初始尺寸?或者只是迭代并添加null值的其他东西?

1 个答案:

答案 0 :(得分:2)

这对我有用:

ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>>(4);
for (int r = 0; r < 4; r++) {
    ArrayList<String> ls = new ArrayList<String>(5);
    ls.add("" + (r + 1));
    list.add(ls);
}
for (ArrayList<String> ls : list) {
    System.out.println(ls);
}

注意:不要将集合中当前元素数ArrayList#size()ArrayList#capacity,当前最大集合(无法访问)混淆。

有关详细信息,请参阅:ArrayList(int)

  

构造一个具有指定初始容量的空列表。

请注意,使用List<List<Whatever>>您并未创建2D动态数组,您需要创建一个包含动态列表的动态列表,因此必须初始化每个动态列表通过单独列出并将列表(从任何大小)添加到另一个列表中,每个列表都具有动态大小(尽管它们具有值)。除非您创建此类或从第三方库导入它,否则普通Java中没有2d动态数组和动态数组数组。


看起来这种结构更适合您的情况:

String[][] stringArrayOfArray = new String[4][5];

完成你想要/需要的另一个非常奇怪的方法(不推荐)是:

List<String>[] arrayOfList = new List[4];
for (int i = 0; i < arrayOfList.length; i++) {
    arrayOfList[i] = new ArrayList<String>();
}