[英]Initialize ArrayList<ArrayList<Integer>>
我遇到了以下问题:
当我初始化ArrayList<ArrayList<Integer>>
,代码是:
ArrayList<ArrayList<Integer>> group = new ArrayList<ArrayList<Integer>>();
group.add((ArrayList<Integer>) Arrays.asList(1, 2, 3));
group.add((ArrayList<Integer>) Arrays.asList(4, 5, 6));
group.add((ArrayList<Integer>) Arrays.asList(7, 8, 9));
for (ArrayList<Integer> list : group) {
for (Integer i : list) {
System.out.print(i+" ");
}
System.out.println();
}
虽然代码可以成功编译,但我仍然在控制台上得到一个例外:
线程“main”中的异常java.lang.ClassCastException:java.util.Arrays $ ArrayList无法在Solution.main中强制转换为java.util.ArrayList(Solution.java:49)
感谢帮助 !
Arrays.asList
不返回java.util.ArrayList
。 它确实返回一个名为ArrayList
的类的实例,巧合的是 - 但这不是java.util.ArrayList
。
除非你需要它真的是一个ArrayList<ArrayList<Integer>>
我只需将它改为:
List<List<Integer>> group = new ArrayList<>();
group.add(Arrays.asList(1, 2, 3));
group.add(Arrays.asList(4, 5, 6));
group.add(Arrays.asList(7, 8, 9));
for (List<Integer> list : group) {
...
}
如果你确实需要一个ArrayList<ArrayList<...>>
- 或者你需要能够添加到“内部”列表,即使你不需要它们使用静态类型的ArrayList
- 那么你需要为每个列表创建一个新的ArrayList
:
group.add(new ArrayList<Integer>(Arrays.asList(1, 2, 3)));
// etc
Arrays.asList
的返回不是java.util.ArrayList
; java.util.Arrays$ArrayList
是一个单独的类,嵌套在Arrays
,即使它是一个List
。
如果你必须有一个ArrayList
,那么使用从Arrays.asList
返回的List
自己创建另一个ArrayList
,而不是强制转换,例如:
group.add(new ArrayList<Integer>( Arrays.asList(1, 2, 3) ));
Arrays.asList
返回嵌套静态类型的实例java.util.Arrays.ArrayList
即从不同java.util.ArrayList
。 您可以通过编程到List
接口( java.util.Arrays.ArrayList
实现)并且没有不需要的强制转换来避免这个问题:
List<List<Integer>> group = new ArrayList<List<Integer>>();
group.add(Arrays.asList(1, 2, 3));
group.add(Arrays.asList(4, 5, 6));
group.add(Arrays.asList(7, 8, 9));
for (List<Integer> list : group) {
for (Integer i : list) {
System.out.print(i+" ");
}
System.out.println();
}
group.add(new ArrayList<Integer>((Arrays.asList(1, 2, 3))));
group.add(new ArrayList<Integer>((Arrays.asList(4, 5, 6))));
group.add(new ArrayList<Integer>((Arrays.asList(7, 8, 9))));
for (ArrayList<Integer> arrayList : group) {
for (Integer integer : arrayList) {
System.out.println(integer);
}
}
请参考此代码。 这可能会帮助您实现您的要求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.