如何在2d ArrayList中更改某些ArrayList的大小?

问题描述 投票:1回答:1

我有这个类来实现2d ArrayList。我希望方法criaDimensao()只将值放在ArrayListmatriz索引位置内,但它会继续在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;

java arrays arraylist multidimensional-array 2d
1个回答
1
投票

因为在构造函数中:

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 ;
}
© www.soinside.com 2019 - 2024. All rights reserved.