簡體   English   中英

初始化ArrayList <ArrayList<Integer> &gt;

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM