我有这个课程来实现2d ArrayList。我希望方法criaDimensao()仅将值放在ArrayList内的matriz索引位置,但它将值保持在matriz的所有索引中。

public class Matriz {
    private ArrayList<ArrayList<Integer>> matriz = new ArrayList<>();

    //constructor
    public Matriz(){

    }

    //constructor
    public Matriz(int lenght){
        int c = 0;
        ArrayList<Integer> init = new ArrayList<>();
        while (c < lenght){
            matriz.add(init);
            c +=1 ;
        }
    }

    public boolean criaDimensao(int index, int tamanhoDimensao){
        for(int i = 0; i < tamanhoDimensao; i++){
            matriz.get(index).add(0); //defalt value 0
        }
        return true;
    }
}


这个想法是在ArrayList内部具有不同大小的matriz

最佳答案

因为在构造函数中:

ArrayList<Integer> init = new ArrayList<>();
while (c < lenght){
    matriz.add(init);
    c +=1 ;
}


您继续在ArrayList的所有索引中添加对同一matriz的引用。因此,当您致电:

matriz.get(index).add(0);


您将其添加到init,这将反映在整个mariz

相反,您可以在构造函数中包含以下内容:

while (c < lenght){
   matriz.add(new ArrayList<Integer>());
   c +=1 ;
}

关于java - 如何更改二维ArrayList中某些ArrayList的大小?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52357341/

10-15 00:50