我正在尝试创建ArrayLists的ArrayList。我想创建25个ArrayLists并使这些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种不同的ArrayLists!
答案 0 :(得分:11)
我会尝试以下方法来执行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);
}
答案 1 :(得分:2)
这很容易。例如,您可以像这样创建它们: 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]]`
}
答案 2 :(得分:1)
感谢。我找到了一个非常简单的解决方案......
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));
答案 3 :(得分:0)
//制作一个包含19个arraylist元素的arraylist
ArrayList<ArrayList> arrList = new ArrayList<ArrayList>();
for(int i = 1; i < 20; i++){
arrList.add(new ArrayList<Integer>(5*i+5));
}