创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];
-
创build和初始化
Object[] yourArray = new Object[ARRAY_LENGTH];
-
写入权限
yourArray[i]= someArrayList;
访问内部ArrayList的元素:
((ArrayList<YourType>) yourArray[i]).add(elementOfYourType); //or other method
-
阅读权限
读取数组元素我作为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。