Ich schreibe einen Code, der eine Arraylist kopieren muss, aber ich bekomme falsche Antwort nach dem Debuggen Ich fand, dass das Ändern einer Kopie von Arraylist die ursprüngliche Arraylist ändert, aber ich bin nicht in der Lage, herauszufinden, warumArrayList ändert sich durch Ändern der Kopie
static void iterDeep(int level,ArrayList<ArrayList<Integer>> current){
if(current.equals(dest)){
found = 1;
printPath(current);
return;
}
if(level <= 0)
return;
for(int i=0;i<3;i++){
for(int j=0;j<2;j++){
ArrayList<ArrayList<Integer>> adj = new ArrayList<ArrayList<Integer>>(current);
if(j == 0){
for(int k=0;k<3;k++){
adj.get(k).set(i , current.get((3+k-1)%3).get(i));
// Here i am changing adj values but values in current are getting changed
}
if(!map.containsKey(adj)){
map.put(adj,current);
iterDeep(level - 1 , adj);
}
}else{
for(int k=0;k<3;k++){
adj.get(k).set(i , current.get((k+1)%3).get(i));
}
if(!map.containsKey(adj)){
map.put(adj,current);
iterDeep(level - 1 , adj);
}
}
}
}
return;
}
Kurze Antwort: mit 'new Arraylist> (current); 'Sie erstellen nur eine neue" äußere "ArrayList, die innere ArrayList ist immer noch die gleiche wie zuvor und enthält somit genau dieselben Elemente wie in Ihrer' aktuellen' Liste. Google Deep Clone versus seichtes Klonen. Tiefes Klonen ist das, was Sie hier brauchen. –
Munchhausen