Stack 栈认识

本文探讨了Java中Stack的POP方法在for循环和while循环中的使用差异。当使用for循环配合POP方法时,由于循环次数与栈大小同步减小,可能导致无法完全弹出所有元素。而使用while循环,特别是结合stack.size()或stack.empty()条件,可以确保栈顶元素全部弹出。正确的做法是利用while循环直到栈为空,确保所有元素得以处理。
摘要由CSDN通过智能技术生成

Stack 栈

***关于pop方法使用for循环输出少的原因***

​ 元素进出规则:FILO,先进后出

​ 继承Vector,扩充五个方法,分别是PUSH压入元素,POP弹出栈顶元素,PEEK查看堆栈顶部的对象,但不从堆栈中移除它。EMPTY测试堆栈是否为空,SEARCH返回对象在堆栈中的位置,以 1 为基数。

​ 注意:

​ POP每次执行一次,栈的大小减小1,如果使用for循环,当执行次数和栈的大小一致时,就不能继续弹出栈顶元素,如下所示

public class ss {
    public static void main(String[] args) {
        Stack<Chinchilla> stack = new Stack<>();
        for (int i = 0; i < 10; i++) {
            stack.push(new Chinchilla(""+i,"弟弟"));
        }
        System.out.println("出栈前的大小 "+stack.size());
        for (int i = 0; i < stack.size(); i++) {
            System.out.println(stack.pop());
        }

    }
}
运行结果:
出栈前的大小 10
龙猫{名称='9', 性别='弟弟'}
龙猫{名称='8', 性别='弟弟'}
龙猫{名称='7', 性别='弟弟'}
龙猫{名称='6', 性别='弟弟'}
龙猫{名称='5', 性别='弟弟'}

Process finished with exit code 0

我们可以看到,弹出第五只小龙猫时,就停止弹出栈顶元素,我们通过debug更容易看出来。
所有,要使用pop弹出栈顶所有元素,应当使用while循环,如下:

public class ss {
    public static void main(String[] args) {
        Stack<Chinchilla> stack = new Stack<>();
        for (int i = 0; i < 10; i++) {
            stack.push(new Chinchilla(""+i,"弟弟"));
        }
        System.out.println("出栈前的大小 "+stack.size());
       while (stack.size()!=0){
           System.out.println(stack.pop());
       }

    }
}
运行结果:
出栈前的大小 10
龙猫{名称='9', 性别='弟弟'}
龙猫{名称='8', 性别='弟弟'}
龙猫{名称='7', 性别='弟弟'}
龙猫{名称='6', 性别='弟弟'}
龙猫{名称='5', 性别='弟弟'}
龙猫{名称='4', 性别='弟弟'}
龙猫{名称='3', 性别='弟弟'}
龙猫{名称='2', 性别='弟弟'}
龙猫{名称='1', 性别='弟弟'}
龙猫{名称='0', 性别='弟弟'}

Process finished with exit code 0

或者,

public class ss {
    public static void main(String[] args) {
        Stack<Chinchilla> stack = new Stack<>();
        for (int i = 0; i < 10; i++) {
            stack.push(new Chinchilla(""+i,"弟弟"));
        }
        System.out.println("出栈前的大小 "+stack.size());
       while (!stack.empty()){
           System.out.println(stack.pop());
       }

    }
}
运行结果:
出栈前的大小 10
龙猫{名称='9', 性别='弟弟'}
龙猫{名称='8', 性别='弟弟'}
龙猫{名称='7', 性别='弟弟'}
龙猫{名称='6', 性别='弟弟'}
龙猫{名称='5', 性别='弟弟'}
龙猫{名称='4', 性别='弟弟'}
龙猫{名称='3', 性别='弟弟'}
龙猫{名称='2', 性别='弟弟'}
龙猫{名称='1', 性别='弟弟'}
龙猫{名称='0', 性别='弟弟'}

Process finished with exit code 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值