[Ljava.lang.Object;无法转换为[Ljava.util.ArrayList;

时间:2013-03-09 19:11:44

标签: java

在我的java代码中,我尝试构建一个arraylist列表,我的代码如下,

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

但是,当我编译代码时,编译器会一直说

  
    

[Ljava.lang.Object;无法转换为[Ljava.util.ArrayList;

  

我可以问为什么我不能将Object []转换为ArrayList []?

4 个答案:

答案 0 :(得分: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));

答案 1 :(得分:4)

你说你正在尝试构建一个ArrayLists列表。但是......你正在尝试使用数组来做到这一点......为什么不使用另一个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<>();(它从你分配给它的变量中推断出类型)。

答案 2 :(得分:1)

您可以通过将ArrayLists放入ArrayLists来制作n维ArrayList,就像n维数组一样。

这里有一个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);
            }
        }
    }
}

请注意,您可以保留&lt;&gt;在新的ArrayList&lt;&gt;之后清空。 Java将推断出类型(无论嵌套方式如何),因为java 7我相信。我只是在示例中将它们写下来,以显示您在每个级别处理的类型,以使示例更清晰。您仍然可以将它们写下来以使代码更具可读性。

答案 3 :(得分:-2)

如下所示在单行中定义,编译器不会抱怨

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