2013-03-09 126 views
7

在我的Java代碼,我嘗試建立ArrayList的名單,我的代碼如下,[Ljava.lang.Object;不能轉換爲[Ljava.util.ArrayList;

private ArrayList<Integer>[] listoflist; 
listoflist = (ArrayList<Integer>[]) new Object[875715]; 

然而,當我編譯代碼,編譯器口口聲聲說

[Ljava.lang.Object;不能轉換爲[Ljava.util.ArrayList;

請問爲什麼我不能將Object []轉換爲ArrayList []?

+8

你爲什麼期待*能夠? – 2013-03-09 19:14:12

+4

因爲您試圖將非參數化類型「對象」轉換爲參數化類型:ArrayList 。 – Rob 2013-03-09 19:16:49

+0

你期望做什麼? – 2013-03-09 19:17:34

回答

4

你說,你想建立ArrayList的列表。但是......你試圖用一個數組來做到這一點...爲什麼不使用另一個ArrayList呢?這其實很簡單:

private List<List<Integer>> listoflist = new ArrayList<ArrayList<Integer>>(); 

下面是使用它的一個例子:

ArrayList<Integer> list1 = new ArrayList<Integer>(); 
list1.add(Integer.valueOf(3)); 
list1.add(Integer.valueOf(4)); 
ArrayList<Integer> list2 = new ArrayList<Integer>(); 
list2.add(Integer.valueOf(6)); 
list2.add(Integer.valueOf(7)); 
listoflist.add(list1); 
listoflist.add(list2); 

ArrayList<ArrayList<Integer>>這麼多次是有點怪異,所以在Java 7中的建設可以只是new ArrayList<>();(其推斷的類型來自你分配給它的變量)。

+0

謝謝你,很好的回答! – Bpache 2013-03-09 20:21:23

4

Java是一個strong typed language - 因此,您不能簡單地將一種類型轉換爲另一種類型。 但是你可以轉換它們。

Object[]List情況下,簡單地使用

Object[] arr = new Object[]{...}; 
List<Object> list = Arrays.asList(arr); 

,如果你想使用它作爲一個ArrayList,例如如果你想加入一些其他元素,簡單地把它包起來再

ArrayList<Object> arrList = new ArrayList<Object>(Arrays.asList(arr)); 
+0

非常感謝。 – Bpache 2013-03-09 20:18:20

-2

像下面一行定義它,編譯器不會抱怨

private ArrayList[] listoflist = (ArrayList<Integer>[]) new Object[10]; 
+2

你錯了,這是完全一樣的陳述,但寫法不同,具有相同的警告:'類型安全:未檢查從Object []轉換爲ArrayList []',並且同樣的錯誤:'[Ljava.lang.Object ;不能轉換爲[Ljava.util.ArrayList;' – Rob 2013-03-09 19:33:47

+0

@Rob:理解。但是當我試圖去做日食的時候,那就是錯誤。但是在單行之後,它會發出你提到的警告。 – AmitG 2013-03-09 19:36:21

1

通過將ArrayLists放入ArrayLists中,您可以製作n維ArrayList,就像n維ArrayList一樣。

這裏有一個用3個維度來展示概念的例子。

public static void main(String args[]){ 
    ArrayList<ArrayList<ArrayList<Integer>>> listOfListOfList = new ArrayList<ArrayList<ArrayList<Integer>>>(); 
    int firstDimensionSize = 3; 
    int secondDimensionSize = 4; 
    int thirdDimensionSize = 5; 

    for (int i = 0; i < firstDimensionSize; i++) { 
     listOfListOfList.add(new ArrayList<ArrayList<Integer>>(vertices)); 
     for (int j = 0; j < secondDimensionSize; j++) { 
      listOfListOfList.get(i).add(new ArrayList<Integer>()); 
      for(int k = 0; k < thirdDimensionSize; k++) { 
       listOfListOfList.get(i).get(j).add(k); 
      } 
     } 
    } 
} 

請注意,您可以在新的ArrayList <後離開<>空>。 Java會推斷這種類型(不管嵌套如何),因爲我相信Java 7。我只是在示例中將它們寫下來,以顯示您在每個級別處理的類型,以使示例更清晰。您仍然可以將它們寫下來以使您的代碼更具可讀性。

相關問題