我是Java的新手,正在尝试创建一个大小不固定的2d列表。我有一个看起来像这样的类:
public class q1 {
List<List<Integer> > L = new ArrayList<List<Integer> >();
public void set(int m,int n){
//This is the function which would get the size of the 2d list
}
}
我看到了答案,但是答案的大小必须固定,例如:
ArrayList<String>[][] list = new ArrayList[10][10];
但是,我想为不同的对象使用不同大小的列表 L 。还有其他选项,例如 copyOf ,但是仅通过此数组可以实现上述功能吗?
答案 0 :(得分:6)
您要在问题中混合两件事,ArrayLists
和arrays
。 ArrayList
是一个由array
备份的可变大小的容器。它有一个constructor
,您可以在其中指定所需的初始容量,因此使用ArrayLists
时,它将看起来像:
public class q1 {
List<List<Integer>> L;
public void set(int m, int n){
L = new ArrayList<>(m); // assuming m is the number or rows
for(int i = 0; i < m; ++i) {
L.add(new ArrayList<>(n));
}
// now you have a List of m lists where each inner list has n items
}
}
对于数组,语法略有不同:
public class q1 {
Integer[][] L;
public void set(int m, int n){
L = new Integer[m][]; // assuming m is the number or rows
for(int i = 0; i < m; ++i) {
L[i] = new Integer[n];
}
// now you have a array of m arrays where each inner array has n items
}
}
此外,如果所有内部数组都具有相同的长度(n)
,则set
方法可以简化为:
public void set(int m, int n){
L = new Integer[m][n]; // assuming m is the number or rows
// now you have a array of m arrays where each inner array has n items
}
答案 1 :(得分:1)
List
没有这种特殊的语法,但是您始终可以遍历较小列表的数量并分别进行初始化。请注意,将大小传递给ArrayList
的构造函数并没有真正设置其大小,但是它确实分配了空间,并可能在将来节省您的重新分配:
public void set(int m,int n){
l = new ArrayList<>(m);
for (int i = 0; i < m; ++i) {
l.add(new ArrayList<>(n));
}
}