2013-03-09 127 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。我只是在示例中将它们写下来,以显示您在每个级别处理的类型,以使示例更清晰。您仍然可以将它们写下来以使您的代码更具可读性。

相关问题