gpt4 book ai didi

java - 设置 ArrayList> 的大小/维度

转载 作者:行者123 更新时间:2023-11-30 09:08:54 27 4
gpt4 key购买 nike

问题

我有一个 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>> 的维度.

我知道在创建 ArrayList 时, you 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值(value)观?

最佳答案

这对我有用:

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) :

Constructs an empty list with the specified initial capacity.

请注意,使用 List<List<Whatever>>您不是在创建二维动态数组,而是在创建一个包含动态列表的动态列表,因此您必须通过单独初始化每个列表并将列表(任意大小)添加到另一个列表中,每个列表都有一个动态大小(尽管它们有值)。纯 Java 中没有二维动态数组或动态数组数组,除非您创建此类或从第三方库导入它。


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

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>();
}

关于java - 设置 ArrayList<ArrayList<String>> 的大小/维度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23303635/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com