【发布时间】: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 是二维的吗?它包含什么?