我想创建一个如下所示的数组列表:

ArrayList<Individual>[] group = new ArrayList<Individual>()[4];

但它不是编译。我该怎么做呢?


当前回答

不能创建泛型类型的数组。创建数组列表:

 List<ArrayList<Individual>> group = new ArrayList<ArrayList<Individual>>();

或者如果你真的需要数组(警告:糟糕的设计!):

 ArrayList[] group = new ArrayList[4];

其他回答

根据Oracle文档:

不能创建参数化类型的数组

相反,你可以这样做:

ArrayList<ArrayList<Individual>> group = new ArrayList<ArrayList<Individual>>(4);

正如Tom Hawting - tackline所建议的那样,更好的做法是:

List<List<Individual>> group = new ArrayList<List<Individual>>(4);

你可以创建一个List[]并通过for循环初始化它们。它编译时没有错误:

List<e>[] l;
for(int i = 0; i < l.length; i++){
    l[i] = new ArrayList<e>();
}

它也适用于arrayList[] l。

我发现这个更容易使用…

static ArrayList<Individual> group[];
......
void initializeGroup(int size)
{
 group=new ArrayList[size];
 for(int i=0;i<size;i++)
 {
  group[i]=new ArrayList<Individual>();
 }

正如其他人提到的,使用另一个List来存储数组列表可能更好,但如果你必须使用数组:

ArrayList<Individual>[] group = (ArrayList<Individual>[]) new ArrayList[4];

您需要取消警告,但在这种情况下是安全的。

这是可行的,数组列表的数组。试着去理解它是如何工作的。

import java.util.*;

public class ArrayOfArrayList {
    public static void main(String[] args) {

        // Put the length of the array you need
        ArrayList<String>[] group = new ArrayList[15];
        for (int x = 0; x < group.length; x++) {
            group[x] = new ArrayList<>();
        }

        //Add some thing to first array
        group[0].add("Some");
        group[0].add("Code");

        //Add some thing to Secondarray
        group[1].add("In here");

        //Try to output 'em
        System.out.println(group[0]);
        System.out.println(group[1]);
    }
}

一些代码归功于Kelvincer。