我有一个数组。对于数组的每个元素,我想存储多个整数。我知道在C中我可以创建一个整数指针数组,并使用该指针创建一个列表。
在Java中,我可以创建一个对象'A'的数组,其中A有一个整数列表。但为什么我不能做这样的事情
List<Integer>[] arr = new ArrayList<Integer>[]();
我明白了:
类型不匹配:无法从ArrayList转换为List []
答案 0 :(得分:5)
出于这个原因,您通常希望避免将集合和数组混合在一起;一个数组是协变(即Integer[]
是一个Object[]
),但是集合(以及一般的泛型)是不变的(即,List<Integer>
不是List<Object>
)。
您肯定可以创建列表列表,这样可以确保类型安全并解决创建通用数组的问题:
List<List<Integer>> intNestedList = new ArrayList<>();
答案 1 :(得分:3)
如Java's own documentation中所述,您无法创建泛型数组。
答案 2 :(得分:2)
ArrayList
是List
,但ArrayList
不是List[]
<击> 如果你想要一个包含整数的列表数组,我建议:
List<Integer>[] xyz; // still writing code will update in a sec
击> <击> 撞击>
根据oracle文档,事实证明你无法创建参数化类型的数组。
答案 3 :(得分:1)
除非您确定需要有限数组,否则我建议您执行List<List<Integer>> arr = new ArrayList<List<Integer>>();
如果您真的想要一个Lists
数组,那么您会希望看到Java question about ArrayList<Integer>[] x
答案 4 :(得分:1)
创建List
数组与创建任何其他对象的数组没什么不同。您可以执行以下任何操作:
List[] listsArray = new List[3];
listsArray[0] = new ArrayList();
listsArray[1] = new LinkedList();
listsArray[2] = new ArrayList();
或者:
List[] listsArray = new List[]{new ArrayList(), new LinkedList(), new ArrayList()};
请注意you are limited in what you can do with generics on arrays。
答案 5 :(得分:1)
这不是一个很好的解决方案,但是您可以尝试使用强制转换。像这样:
List<Integer>[] arr = (List<Integer>[]) new List[SIZE_OF_YOUR_ARRAY];
您可能会收到警告,但它仍然可以正常工作。
答案 6 :(得分:0)
如果要创建一个最多可容纳10 List<Integer>
的数组,则必须以这种方式声明数组。
List<Integer>[] arr = new ArrayList[10];
以下作业有效
List<Integer> intList = new ArrayList<>();
arr[0] = intList;
而后续将因编译错误而失败
List<String> stringList = new ArrayList<>();
arr[0] = stringList;
编译失败,
incompatible types: java.util.List<java.lang.String>
cannot be converted to java.util.List<java.lang.Integer>
答案 7 :(得分:0)
正如我发现的那样,你需要一个数组数组。 你可以做到这一点,制作你的内部数组:
Integer[] array1 = new Integer[];
Integer[] array2 = new Integer[];
然后将它们放在另一个数组中:
Integer[][] arrays = new Integer[][] { array1, array2 };
或
Integer[][] arrays = { array1, array2 };
也许最好这样做:
List<List<Integer>> listOfLists = Lists.newArrayList();
listOfLists.add(Lists.newArrayList("123","456","789"));
毕竟我建议你读这个: How to make an array of arrays in Java
答案 8 :(得分:0)
使用邻接列表的图形实现描述了列表数组的用法。
public class Graph {
int vertex;
LinkedList<Integer> list[];
public Graph(int vertex) {
this.vertex = vertex;
list = new LinkedList[vertex];
for (int i = 0; i <vertex ; i++) {
list[i] = new LinkedList<>();
}
}
}
如您所见,Graph类的构造函数用于定义列表数组。 在同一构造函数中,列表数组也被初始化。 希望对您解决问题和要求有所帮助!