我有这个类来实现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 ;
}