如何正确创建 ArrayLists 的 ArrayList?
Posted
技术标签:
【中文标题】如何正确创建 ArrayLists 的 ArrayList?【英文标题】:How to correctly create an ArrayList of ArrayLists? 【发布时间】:2013-11-14 12:34:58 【问题描述】:我正在尝试创建一个 ArrayList 的 ArrayList。我想创建 25 个 ArrayList 并让这些 ArrayList 保存不同的值。目标是创建一个按字长排序的字典。
我的代码看起来像
for(int i = 0; i < 25; i++)
list2D.add(list);
for(int i = 0; i < stringList; i++)
list2D.get(stringList.get(i).length()).add(stringList.get(i))
问题是每个列表在完成后都包含相同的值。
我知道为什么会出现问题。 “list”是一个 ArrayList,ArrayList 是对象,如果您编辑一个对象,那么包含该对象的所有内容都将被编辑。
为了解决我尝试过的问题
for(int i = 0; i < 25; i++)
list = new ArrayList<String>();
for(int i2 = 0; i2 < stringList.size(); i2++)
if(stringList.get(i).length() == i)
list.add(stringList.get(i2));
list2D.add(list);
但是当我测试我的“list2D”时
for(int i = 0; i < 25; i++)
System.out.print(list2D.get(i).size()+" ");
我明白了
0 0 0 0 0 58110 0 58110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
我不知道为什么......
还可能需要注意 stringList 包含 58110 个值。
我也不想制作 25 个不同的 ArrayList!
【问题讨论】:
不应该打印 list2d 的大小吗? IE。System.out.println(list2d.get(i).size()+" ")
@Steinar 谢谢,但这只是一个错字,我的实际代码很好。
stringList
是什么类型?你写了for(int i = 0; i < stringList; i++)
,我不明白这有什么意义。
在你的内部 for 循环中,你有 stringList.get(i).length()。 stringList 是二维的吗?它包含什么?
【参考方案1】:
//创建一个包含 19 个数组列表元素的数组列表
ArrayList<ArrayList> arrList = new ArrayList<ArrayList>();
for(int i = 1; i < 20; i++)
arrList.add(new ArrayList<Integer>(5*i+5));
【讨论】:
抱歉,忘了补充,arraylist 元素的大小每次迭代要长 5 个元素【参考方案2】:谢谢。不过我找到了一个非常简单的解决方案...
for(int i = 0; i < 25; i++)
list2D.add(new ArrayList<String>());
for(int i = 0; i < word.size(); i++)
list2D.get(stringList.get(i).length()).add(stringList.get(i));
【讨论】:
@SargeBorsch 你是什么意思? 尝试使用长度 > 25 的单词运行它 我的 58110 个单词长度都不超过 25 个字母【参考方案3】:我会尝试以下方法对 stringList 进行单次传递
List<List<String>> dict = new ArrayList<>();
for(string s: stringsList)
int len = s.length();
// add new array lists as required, could be any length, assuming << 100
while(dict.size() <= len) dict.add(new ArrayList<String>());
// add the string to the right list.
dict.get(len).add(s);
【讨论】:
【参考方案4】:这很容易。例如,您可以像这样创建它们: http://ideone.com/3NZwWU
// just for convenience, initializes arraylist with values
static <T> ArrayList<T> AL(T... values)
ArrayList<T> r = new ArrayList<T>();
for (T x : values)
r.add(x);
return r;
public static void main (String[] args) throws java.lang.Exception
System.out.println(AL(
AL(3,2,24,131),
AL("this", "is", "second", "array")));
// prints `[[3, 2, 24, 131], [this, is, second, array]]`
【讨论】:
我不会投反对票,但你能解释一下你的答案是如何按长度对单词进行排序的吗? 糟糕。也许我太懒了,只回答了标题中写的问题。 "如何正确创建一个 ArrayList 的 ArrayList?" 通常文本和问题是相关的,但有时... ;) 如何创建 ArrayLists(在 ArrayList 中),其中每个数组列表的单词长度相同。 如果你事先不知道组数,那么最好改用Map<Integer, List<String>>
。您的问题假设实施不理想。以上是关于如何正确创建 ArrayLists 的 ArrayList?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Firestore 云数据库中读取文档中的 ArrayLists?
java - 如何在java中使用布尔值对ArrayLists进行排序?
在处理 ArrayLists 时,我用啥代替 charAt?