Я пишу код, который должен скопировать arraylist, но я получаю неправильный ответ после отладки, я обнаружил, что изменение копии arraylist меняет оригинального arraylist, но я не могу понять, почемуИзменения ArrayList путем изменения его копии
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;
}
Короткого ответ: с 'нового ArrayList> (current); 'вы создаете только новый« внешний »ArrayList, внутренний ArrayList по-прежнему остается таким же, как и раньше, и содержит точно такие же элементы, что и в вашем« текущем »списке. Глубокий клон Google против мелкого клонирования. Глубокое клонирование - вот что вам нужно здесь. –
Munchhausen