I need to implement a 2D dynamic array. The number of rows is fixed, say n. But the number of columns for each row is not fixed and equivalent. For instance, the first row h
How about List<List<Foo>>
?
For Example:
List<List<Foo>> list = new ArrayList<List<Foo>>();
List<Foo> row1 = new ArrayList<Foo>();
row1.add(new Foo());
row1.add(new Foo());
row1.add(new Foo());
list.add(row1);
List<Foo> row2 = new ArrayList<Foo>();
row2.add(new Foo());
row2.add(new Foo());
list.add(row2);
You could create an array of ArrayList elements because your row count is fixed.
ArrayList[] dynamicArray = new ArrayList[n]();
Note: You'll need to allocate an ArrayList object in each entry in the array. So...
for (int loop = 0; loop < n; loop++)
dynamicArray[loop] = new ArrayList();
OR if you'd like both rows and columns to be dynamic you could create an ArrayList of ArrayLists....
ArrayList<ArrayList<T>> dynamicArray = new ArrayList<ArrayList<T>>();
Once again, you'll need to create an array list in each new entry to dynamicArray.
Try:
ArrayList<ArrayList<DataType>> array = new ArrayList<ArrayList<DataType>>();
for (int i = 0; i < n; ++i) {
array.add(new ArrayList<DataType>());
}
As you say, you can make an array of arraylists and use the ArrayList(int initial capacity) constructor to set the capacity of each column:
ArrayList<YourObject>[] rows=new ArrayList<YourObjects>[n];
for(i=0;i<n;i++){
rows[i]=ArrayList<YourObjects>(initialsize);
}
I would create an array of ArrayList (ArrayList[3] rows = new ArrayList[3] if the rows were 3) Then for each row create column classes and insert them into an ArrayList. and then place the ArrayList into the Array. the row array's index can be used to keep track of the row number. Remember arrays start there indexes at 0 so the row number would be rows[index+1]
if the number of rows is fixed, try something like this:
ArrayList<MyObject>[] = new ArrayList<MyObject>[fixedRows]