[英]2D dynamic array using ArrayList in Java
我需要实现一个二维动态数组。 行数是固定的,比如 n。 但是每行的列数不是固定的和等价的。 例如,第一行有 3 个元素,第二行有 5 个元素。 如何使用 Arraylist 在 Java 中执行此操作。 谢谢。
List<List<Foo>>
怎么样?
例如:
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);
ArrayList<ArrayList<SomeObject>> twodlist = new ArrayList<ArrayList<SomeObject>>();
ArrayList<SomeObject> row = new ArrayList<SomeObject>();
row.add(new SomeObject(/* whatever */));
// etc
twodlist.add(row);
row = new ArrayList<SomeObject>();
// etc
您可以对行使用数组,因为此维度是固定的:
@SuppressWarnings("unchecked")
ArrayList<T>[] arr = new ArrayList[ fixedsize];
或使用嵌套的 ArrayLists:
List<List<T>> list = new ArrayList<List<T>>( fixedsize );
尝试:
ArrayList<ArrayList<DataType>> array = new ArrayList<ArrayList<DataType>>();
for (int i = 0; i < n; ++i) {
array.add(new ArrayList<DataType>());
}
正如您所说,您可以制作一个数组列表并使用 ArrayList(int initial capacity) 构造函数来设置每列的容量:
ArrayList<YourObject>[] rows=new ArrayList<YourObjects>[n];
for(i=0;i<n;i++){
rows[i]=ArrayList<YourObjects>(initialsize);
}
您可以创建一个 ArrayList 元素数组,因为您的行数是固定的。
ArrayList[] dynamicArray = new ArrayList[n]();
注意:您需要在数组的每个条目中分配一个 ArrayList object。 所以...
for (int loop = 0; loop < n; loop++)
dynamicArray[loop] = new ArrayList();
或者,如果您希望行和列都是动态的,您可以创建一个 ArrayList 的 ArrayLists...。
ArrayList<ArrayList<T>> dynamicArray = new ArrayList<ArrayList<T>>();
再一次,您需要在 dynamicArray 的每个新条目中创建一个数组列表。
如果行数是固定的,请尝试以下操作:
ArrayList<MyObject>[] = new ArrayList<MyObject>[fixedRows]
List<ArrayList<SomeObject>> twoDList = new ArrayList<List<SomeObject>>(n);
for( int i=0; i<n; i++ )
twoDList.add( new ArrayList<SomeObject>() );
用于:
twoDList.get(rownumber).add(newElementInColumn);
我将创建一个 ArrayList 数组(ArrayList[3] rows = new ArrayList[3] 如果行是 3)然后为每一行创建列类并将它们插入 ArrayList。 然后将 ArrayList 放入阵列中。 行数组的索引可用于跟踪行号。 记住 arrays 从 0 开始索引,所以行号是 rows[index+1]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.