-1
我正面臨與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 variable也改變了」? – sha1
添加一些可以看到'al'和'ans'更改的sysout。 –
可以更精確地說明'ans'的兩個'println'的輸出是什麼以及你期望的結果是什麼? –