2014-11-24 102 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

相關問題