Я столкнулся с проблемой, связанной с Arraylist Arraylist. Всякий раз, когда я очищаю Arraylist al в моем коде, переменная ans также изменяется. Я знаю, что он хранится по ссылке. Любая идея, как решить эту проблему? Мой код приведен ниже:Сохраняет ли ArrayList ArrayList ссылку?
public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) {
ArrayList<ArrayList<Integer>> ans = new ArrayList();
ArrayList<Integer> al = new ArrayList();
Queue<TreeNode> myQ = new LinkedList();
if(root == null)
return ans;
myQ.add(root);
myQ.add(null);
TreeNode temp;
while(!myQ.isEmpty()){
temp = myQ.remove();
if(temp == null){
ans.add(al);
System.out.println("al is: " + al);
System.out.println(" ans is: " + ans);
al.clear();
System.out.println(" ans is: " + ans);
if(myQ.isEmpty())
break;
myQ.add(null);
}
else{
al.add(temp.val);
if(temp.left != null)
myQ.add(temp.left);
if(temp.right != null)
myQ.add(temp.right);
}
}
//System.out.println(ans);
return ans;
}
Благодарности
Что вы подразумеваете под «переменной ans, также измененной»? – sha1
Добавьте некоторые из sysout, где можно увидеть изменения 'al' и' ans'. –
Не могли бы вы уточнить, что означает вывод двух 'println'' ans' и чего вы ожидаете? –