我使用堆棧類從堆棧再次推List<Integer>
和彈出項背:棧上調用pop()方法返回錯誤的項目
Stack<List<Integer>> mStack = new Stack<>();
public void pushToStack(View view){
List<Integer> mSearchResults = new ArrayList<>();
for(int i=0; i< 10;i++){
mSearchResults.add(i);
}
Log.d(TAG,"Pushing item: " + mSearchResults.size());
mStack.push(mSearchResults);
Log.d(TAG,"Clearing list");
mSearchResults.clear();
Log.d(TAG,"Size after clearing : " + mSearchResults.size());
}
我推疊後結算清單。清除後
尺寸10
清除列表::
的pushToStack函數輸出的日誌:
推項0
public void popFromStack(View view){
if(mStack.size() == 0){
Log.d(TAG,"Stack is Empty");
}else{
List<Integer> searchResults = mStack.pop();
Log.d(TAG,"Result size after pop: " + searchResults.size());
}
}
和popFromStack首席TS日誌:
結果大小彈出後:0
我不知道爲什麼mStack.pop()返回0作爲列表項的大小而不是10
我在做什麼錯在這裏?
您正在推送堆棧中的列表,並清除該列表。你爲什麼期望清單不被清除?如果你把一個瓶子放在一個房間裏,然後倒空那個瓶子,然後把瓶子從房間裏拿出來,它將是空的,不是嗎? –
@JBNizet java通過值傳遞方法參數而不是引用。不是嗎? – Pankaj
它通過的值*是一個參考。任何非基本變量或參數都是對象的*引用*。請參閱[此答案](https://stackoverflow.com/a/40523/4125191)。 – RealSkeptic