初始化ArrayList <arraylist <integer>&gt; </arraylist <integer>

时间:2014-11-24 19:49:45

标签: java arrays arraylist

我遇到了以下问题:

初始化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();
}

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

线程中的异常&#34; main&#34; java.lang.ClassCastException:java.util.Arrays $ ArrayList无法强制转换为java.util.ArrayList     在Solution.main(Solution.java:49)

感谢您的帮助!

4 个答案:

答案 0 :(得分:11)

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<...>> - 或者您需要能够添加到&#34;内部&#34;列表即使您不需要静态类型ArrayList - 但您需要为每个列表创建一个新的ArrayList

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

答案 1 :(得分:5)

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

如果您必须拥有ArrayList,请使用ArrayList中返回的List创建另一个Arrays.asList,而不是投放,例如:

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

答案 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();
}

答案 3 :(得分:1)

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);
  }
}

请参阅此代码。这可能会帮助您实现您的要求。