Nav*_*ran 2 java collections stack
我有一个非常基本的问题
Stack<Integer> s=new Stack<integer>();
s.push(New Integer(1));
s.push(New Integer(2));
s.push(New Integer(3));
for(int i=0;i<s.size();i++){
System.out.println("i: "+i+" size:"+s.size());
System.out.print(s.pop());
if(s.size()>=1)
System.out.print(" ->");
}
Run Code Online (Sandbox Code Playgroud)
这导致输出
3-> 2->
并不是
3-> 2-> 1
循环不应该运行三次,条件是否i < s.size()随堆栈大小的变化而变化?
i < s.size()随着堆栈大小的变化,条件是否会发生变化?
是的,因为i同时增加而size()减少.走过头脑或纸上的逻辑.
for ( i = 0, size = 3 )
pop() ... i++
for ( i = 1, size = 2 )
pop() ... i++
for ( i = 2, size = 1 )
loop ends
Run Code Online (Sandbox Code Playgroud)
我们通常会写这样的循环:
while (!s.isEmpty()) {
Integer e = s.pop();
...
}
Run Code Online (Sandbox Code Playgroud)