用Java初始化2D列表

时间:2018-07-08 15:55:35

标签: java list arraylist

我是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 ,但是仅通过此数组可以实现上述功能吗?

2 个答案:

答案 0 :(得分:6)

您要在问题中混合两件事,ArrayListsarraysArrayList是一个由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));
    }
}