在Java中定义一个整数List数组

时间:2015-04-27 21:20:01

标签: java arrays list

我有一个数组。对于数组的每个元素,我想存储多个整数。我知道在C中我可以创建一个整数指针数组,并使用该指针创建一个列表。

在Java中,我可以创建一个对象'A'的数组,其中A有一个整数列表。但为什么我不能做这样的事情

List<Integer>[] arr = new ArrayList<Integer>[]();

我明白了:

  

类型不匹配:无法从ArrayList转换为List []

9 个答案:

答案 0 :(得分:5)

出于这个原因,您通常希望避免将集合和数组混合在一起;一个数组是协变(即Integer[]是一个Object[]),但是集合(以及一般的泛型)是不变的(即,List<Integer>不是List<Object>)。

您肯定可以创建列表列表,这样可以确保类型安全并解决创建通用数组的问题:

List<List<Integer>> intNestedList = new ArrayList<>();

答案 1 :(得分:3)

Java's own documentation中所述,您无法创建泛型数组。

答案 2 :(得分:2)

ArrayListList,但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类的构造函数用于定义列表数组。 在同一构造函数中,列表数组也被初始化。 希望对您解决问题和要求有所帮助!