我使用堆栈类从堆栈再次推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