Как изменить размер некоторого ArrayList в 2d ArrayList? - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть этот класс для реализации 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;

1 Ответ

0 голосов
/ 16 сентября 2018

Потому что в конструкторе:

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 ;
}
...