在我的java代码中,我尝试建立一个arraylist列表,我的代码如下,
private ArrayList<Integer>[] listoflist;
listoflist = (ArrayList<Integer>[]) new Object[875715];
但是,当我编译代码时,编译器一直说
[Ljava.lang.Object; 不能转换为 [Ljava.util.ArrayList;
我可以问为什么我不能将 Object[] 转换为 ArrayList[] 吗?
在我的java代码中,我尝试建立一个arraylist列表,我的代码如下,
private ArrayList<Integer>[] listoflist;
listoflist = (ArrayList<Integer>[]) new Object[875715];
但是,当我编译代码时,编译器一直说
[Ljava.lang.Object; 不能转换为 [Ljava.util.ArrayList;
我可以问为什么我不能将 Object[] 转换为 ArrayList[] 吗?
您说您正在尝试构建 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<>();
(它从你分配给它的变量中推断出类型)。
Java 是一种强类型语言- 因此您不能简单地将一种类型转换为另一种类型。但是,您可以转换它们。
在简单使用的情况Object[]
下List
Object[] arr = new Object[]{...};
List<Object> list = Arrays.asList(arr);
如果您想将其用作ArrayList
,例如,如果您想添加一些其他元素,只需再次包装它
ArrayList<Object> arrList = new ArrayList<Object>(Arrays.asList(arr));
您可以通过将 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);
}
}
}
}
请注意,您可以在新的 ArrayList<> 之后将 <> 留空。Java 将推断类型(无论如何嵌套),因为我相信 java 7。我只是在示例中将它们写下来,以显示您在每个级别处理的类型,以使示例更加清晰。您仍然可以将它们写下来以使您的代码更具可读性。
像下面这样在单行中定义它,编译器不会抱怨
private ArrayList[] listoflist = (ArrayList<Integer>[]) new Object[10];