创建一个Arraylists数组

时间:2011-12-19 09:09:01

标签: java arrays arraylist

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

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

但它没有编译。我怎么能这样做?

20 个答案:

答案 0 :(得分:128)

根据Oracle Documentation

  

“您无法创建参数化类型数组”

相反,你可以这样做:

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

正如Tom Hawting所说 - 强调,这样做更好:

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

答案 1 :(得分:86)

正如其他人提到的那样,最好使用另一个列表来存储ArrayList,但是如果你必须使用数组:

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

答案 2 :(得分:72)

这有效:

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

答案 3 :(得分:23)

您可以创建一个扩展ArrayList的类

class IndividualList extends ArrayList<Individual> {

}

然后创建数组

IndividualList[] group = new IndividualList[10];

答案 4 :(得分:16)

我完全不理解,为什么每个人都在建议阵列的genric类型,尤其是这个问题。

如果我需要索引n个不同的arraylists,该怎么办?

声明List<List<Integer>>我需要手动创建n ArrayList<Integer>个对象,或者使用for循环来创建n列表或其他方式,无论如何它总会我有责任创建n列表。

如果我们通过强制转换为List<Integer>[] = (List<Integer>[]) new List<?>[somenumber]来声明它,那就太棒了。我认为这是一个很好的设计,人们不必自己创建所有的索引对象(arraylists)

任何人都可以告诉我为什么这个(arrayform)会是一个糟糕的设计,它的缺点是什么?

答案 5 :(得分:11)

您可以创建Array of 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<>());

使用方法参考

更好
List<Integer>[] outer = new List[10];
Arrays.setAll(outer,  ArrayList :: new);

答案 6 :(得分:6)

这种情况的问题在于使用arraylist,你会得到o(n)的时间复杂度,以便在特定位置添加。如果使用数组,则通过声明数组来创建内存位置,因此它是常量

答案 7 :(得分:5)

这适用于ArrayList数组。尝试了解它是如何工作的。

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致信一些代码。

答案 8 :(得分:3)

您无法创建泛型类型的数组。创建ArrayLists列表:

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

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

 ArrayList[] group = new ArrayList[4];

答案 9 :(得分:2)

  1. 创建和初始化

    Object[] yourArray = new Object[ARRAY_LENGTH];
    
  2. 写入权限

    yourArray[i]= someArrayList;
    

    访问内部ArrayList的元素:

    ((ArrayList<YourType>) yourArray[i]).add(elementOfYourType); //or other method
    
  3. 读取权限

    将数组元素i作为ArrayList使用类型转换:

    someElement= (ArrayList<YourType>) yourArray[i];
    

    表示数组元素i:读取索引j

    处的ArrayList元素
    arrayListElement= ((ArrayList<YourType>) yourArray[i]).get(j);
    

答案 10 :(得分:1)

我想我已经很晚了,但我遇到了同样的问题,必须按照我的项目的要求创建一个数组列表,以便将不同子类的对象存储在同一个地方,这就是我最终要做的:

ArrayList<?>[] items = new ArrayList[4];
ArrayList<Chocolate> choc = new ArrayList<>();
ArrayList<Chips> chips = new ArrayList<>();
ArrayList<Water> water = new ArrayList<>();
ArrayList<SoftDrink> sd = new ArrayList<>();

因为数组中的每个数组列表都包含不同的对象(Chocolate、Chips、Water 和 SoftDrink) --这是一个模拟自动售货机的项目--。 然后我将每个 Arraylists 分配给数组的索引:

items[0]=choc;
items[1]=chips;
items[2]=water;
items[3]=sd;

希望对遇到类似问题的人有所帮助。

答案 11 :(得分:1)

静态地声明一个ArrayLists数组,比如精灵位置为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>();
    }
}

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

答案 12 :(得分:1)

List [] listArr = new ArrayList [4];

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

答案 13 :(得分:1)

您可以像这样创建  ArrayList<Individual>[] group = (ArrayList<Individual>[])new ArrayList[4];

您必须创建非泛型类型的数组,然后将其转换为通用类型。

答案 14 :(得分:0)

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

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

然后你就可以安全地拥有:

Individuals[] group = new Individuals[4];

答案 15 :(得分:0)

ArrayList<String> al[] = new ArrayList[n+1];
for(int i = 0;i<n;i++){
   al[i] = new ArrayList<String>();
}

答案 16 :(得分:0)

你可以这样做:

//创建ArrayList类型的数组

`ArrayList<Integer>[] a = new ArrayList[n];`

//对于数组中的每个元素,创建一个ArrayList

for(int i=0; i<n; i++){ 
    a[i] = new ArrayList<Integer>();
}

答案 17 :(得分:0)

String strArray[]={
getResources().getString(R.string.string1),
getResources().getString(R.string.string2),
getResources().getString(R.string.string3),
getResources().getString(R.string.string4)

};

答案 18 :(得分:0)

我发现这更容易使用......

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

答案 19 :(得分:-1)

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

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

它也适用于arrayList [] l。