创build一个Arraylists数组

我想创build一个如下所示的ArrayList数组:

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

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

根据Oracle文档 :

“您不能创build参数化types的数组”

相反,你可以这样做:

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

正如汤姆·霍廷(Tom Hawting)所指出的那样,这样做更好:

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

正如其他人已经提到,使用另一个列表来存储ArrayList可能会更好,但是如果您必须使用一个数组:

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

这工作:

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

你可以创build一个扩展ArrayList的类

 class IndividualList extends ArrayList<Individual> { } 

然后创build数组

 IndividualList[] group = new IndividualList[10]; 

我完全不明白,为什么大家都在为这个问题提出特别的arraystypes。

如果我的需要是索引n不同的数组列表。

在声明List<List<Integer>>我需要手动创buildn ArrayList<Integer>对象,或者使用for循环创buildn列表或者其他方式,总之我总是有责任创buildn列表。

如果我们通过强制转换为List<Integer>[] = (List<Integer>[]) new List<?>[somenumber] , 我认为这是一个很好的devise,不需要自己创build所有的索引对象(arrays列表)

任何人都可以启发我为什么这(arrayform)将是一个糟糕的devise,它有什么缺点?

这种情况下的问题是通过使用一个数组列表来获得o(n)的时间复杂度,以便在特定的位置添加。 如果使用数组,则通过声明数组来创build内存位置,因此它是不变的

您可以创buildArrayList数组

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

这将有助于完整的情况下。 你知道外面的大小。 但内在的大小不一。 在这里你可以创build固定长度的数组。 其中包含大小不等的数组列表。 希望这会对你有所帮助

您不能创buildgenericstypes的数组。 创buildArrayList列表:

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

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

  ArrayList[] group = new ArrayList[4]; 
  1. 创build和初始化

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

     yourArray[i]= someArrayList; 

    访问内部ArrayList的元素:

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

    读取数组元素我作为ArrayList使用types转换:

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

    对于数组元素i:读取索引j处的ArrayList元素

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

这工作,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一些代码。

为静态声明一个ArrayList的数组,例如Sprite的位置为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>(); } 

dynamic:

 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>(); } } 

尽pipe这里有一些警告和一些复杂的build议,但我发现ArrayLists数组是一个优雅的解决scheme来表示相同types的相关ArrayList。

我觉得这更容易使用…

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

你可以这样做 :

//创build一个ArrayListtypes的数组

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

//为数组中的每个元素创build一个ArrayList

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

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

您必须创build非genericstypes的数组,然后将其转换为genericstypes。

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

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

它也适用于arrayList [] l。