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

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

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


当前回答

可以创建一个扩展ArrayList的类

class IndividualList extends ArrayList<Individual> {

}

然后创建数组

IndividualList[] group = new IndividualList[10];

其他回答

根据Oracle文档:

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

相反,你可以这样做:

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

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

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

为了静态地声明一个数组列表数组,例如,精灵位置为Points:

ArrayList<Point>[] positionList = new ArrayList[2];

public Main(---) {
    positionList[0] = new ArrayList<Point>(); // Important, or you will get a NullPointerException at runtime
    positionList[1] = new ArrayList<Point>();
}

动态:

ArrayList<Point>[] positionList;
int numberOfLists;

public Main(---) {
    numberOfLists = 2;
    positionList = new ArrayList[numberOfLists];
    for(int i = 0; i < numberOfLists; i++) {
        positionList[i] = new ArrayList<Point>();
    }
}

尽管这里有一些注意事项和一些复杂的建议,但我发现一个数组列表数组是表示相同类型的相关数组列表的一种优雅解决方案。

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

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

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

List[] listArr = new ArrayList[4];

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

可以创建Array或ArrayList

List<Integer>[] outer = new List[number];
for (int i = 0; i < number; i++) {
    outer[i] = new ArrayList<>();
}

这在这种情况下很有帮助。你知道外面那个的尺寸。但是内部的大小是不同的。在这里,您可以创建一个固定长度的数组,其中包含大小变化的数组列表。希望这对你有所帮助。

在Java 8及以上版本中,你可以以一种更好的方式做到这一点。

List<Integer>[] outer = new List[number];
Arrays.setAll(outer, element -> new ArrayList<>());