我需要实现一个二维动态数组。行数是固定的,比如说n。但是每一行的列数不固定且不相等。例如,第一行有3个元素,第二行有5个元素。如何使用ArrayList在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);
List
是一个接口,ArrayList
是它的具体实现。如果你有List<Foo>
,那么你也可以引用LinkedList
或其他实现方式。 - jmjArrayList<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
2dlist
不是Java的有效标识符。 :) - Ted Hopp@SuppressWarnings("unchecked")
ArrayList<T>[] arr = new ArrayList[ fixedsize];
或者使用嵌套的ArrayList:
List<List<T>> list = new ArrayList<List<T>>( fixedsize );
ArrayList<ArrayList<T>>
在技术上可以容纳任何你喜欢的对象,虽然你需要使用一些难看的转换或反射才能做到这一点。除此之外,数组和集合类型的类型安全性或缺乏类型安全性是相同的。 - x4u尝试:
ArrayList<ArrayList<DataType>> array = new ArrayList<ArrayList<DataType>>();
for (int i = 0; i < n; ++i) {
array.add(new ArrayList<DataType>());
}
@SuppressWarnings("unchecked")
,但是不建议这样做。 - truthealitynew
语句中不使用 <SomeObject>
来完成。像这样:http://ideone.com/A7fpO - truthealityArrayList<YourObject>[] rows=new ArrayList<YourObjects>[n];
for(i=0;i<n;i++){
rows[i]=ArrayList<YourObjects>(initialsize);
}
ArrayList[] dynamicArray = new ArrayList[n]();
for (int loop = 0; loop < n; loop++)
dynamicArray[loop] = new ArrayList();
如果您希望行和列都是动态的,您可以创建一个ArrayList的ArrayList....
ArrayList<ArrayList<T>> dynamicArray = new ArrayList<ArrayList<T>>();
再一次,您需要在dynamicArray的每个新条目中创建一个数组列表。
ArrayList<MyObject>[] = new ArrayList<MyObject>[fixedRows]
@SuppressWarnings("unchecked")
来确保它始终起作用。 - truthealityArrayList[] = new ArrayList[fixedRows]
。讨厌你Java。 - erickzettaList<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);
Something [] [] s = new Something [numRows] []
和s [0] = new Something [3]
呢? - Tedil