2014-11-24 76 views
6

我遇到了一个问题如下:初始化的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(); 
} 

虽然代码可以编译成功,我仍然得到异常在控制台上:螺纹

异常 “主要” java.lang.ClassCastException:java.util.Arrays中的$ ArrayList中不能Solution.main被转换为java.util.ArrayList中 (Solution.java:49)

感谢您的帮助!

+0

这让我觉得应该在编译时抓住一些东西。什么是强制演员? – Blindy 2014-11-24 19:56:47

回答

9

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 
+1

@manouti:Doh!我专门复制那条线来做到这一点...完成。 – 2014-11-24 20:05:00

4

Arrays.asList的回报不是java.util.ArrayList; java.util.Arrays$ArrayList是一个独立的类,嵌套在Arrays中,即使它是List

如果你必须有一个ArrayList,然后自己创建另一个ArrayList使用返回ListArrays.asList,而不是铸造,例如:

group.add(new ArrayList<Integer>(Arrays.asList(1, 2, 3))); 
2

Arrays.asList返回与java.util.ArrayList不同的嵌套静态类型java.util.Arrays.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(); 
} 
0
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); 
    } 
} 

请参考此代码。这可能会帮助你达到你的要求。

+1

你的答案与已经接受的答案有什么不同? – yakobom 2017-08-17 07:02:24

相关问题