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

ArrayList<Individual>[] group = new ArrayList<Individual>()[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。

如果你想避免Java警告,并且仍然有一个数组列表数组,你可以将数组列表抽象为一个类,就像这样:

public class Individuals {
    private ArrayList<Individual> individuals;
    
    public Individuals() {
        this.individuals = new ArrayList<>();
    }
    
    public ArrayList<Individual> getIndividuals() {
        return individuals;
    }
}

那么你就可以安全地拥有:

Individuals[] group = new Individuals[4];

List[] listArr = new ArrayList[4];

上面这行给出了警告,但它是有效的(即它创建了ArrayList的数组)

如此:

ArrayList<String>[] group = new ArrayList[4];

尽管它会产生一个你可能想要抑制的警告。

创建和初始化 对象[]yourArray = new对象[ARRAY_LENGTH]; 写访问 yourArray[我]= someArrayList; 访问内部数组列表的元素: ((ArrayList < YourType >) yourArray[我])阀门(elementOfYourType);//或其他方法 读访问 将数组元素i读取为数组列表使用类型转换: someElement= (ArrayList<YourType>) yourArray[i]; 对于数组元素i:读取数组列表元素在索引j处的值 arrayListElement= (ArrayList<YourType>) yourArray[i]).get(j);