java中栈的应用

对于栈,学习编程的同学一定都不陌生,先进后出,这就是他的基本思想,他在java中有一下应用:

Stack stack = new Stack();
stack.push(Object item)//入栈

/**
源代码
*/
public E push(E item) {
    addElement(item);
    return item;
}
由于Stack继承了Vector,addElement(item)为Vector中的方法
class Stack<E> extends Vector<E>

在这里插入图片描述

stack.pop()//出栈

/**
源代码
*/
public synchronized E pop() {
    E       obj;
    int     len = size();

    obj = peek();
    removeElementAt(len - 1);

    return obj;
}

在这里插入图片描述

stack.peek()//获取栈顶元素,注意是获取,不是出栈
/**
源代码
*/
public synchronized E peek() {
    int     len = size();
	//栈顶如果为空会报错,这是非常重要的一点,写代码的时候一定要进行判断
    if (len == 0)
        throw new EmptyStackException();
    return elementAt(len - 1);
}

在这里插入图片描述

stack.empty();//判断是栈是否为空

public boolean empty() {
    return size() == 0;
}

注意这里返回的是布尔类型,如果想判断不为在前面加上!,即!stack.empty();

stack.search(Object o)//查找元素在栈中的位置,以1为基数,返回-1代表无此元素

/**
源代码
*/
public synchronized int search(Object o) {
    int i = lastIndexOf(o);

    if (i >= 0) {
        return size() - i;
    }
    return -1;
}

在这里插入图片描述

栈在我们的系统的的运用中是非常广泛的,例如Linux系统中的cd命令

cd a/b/c/../../

这个命令最后进入a目录,系统是如何进入a目录中的呢,这就是栈的应用,这都可以当做一道面试题了,很多人都不知道。

还有递归,很多人只会使用它,你们知道它是如何实现的吗?

递归的实现就是:每次递归调用都会把函数的局部变量、参数值和返回地址等压入调用栈中,然后递归返回的时候,从栈顶中弹出上一次递归的各项参数,所以这就是递归为什么可以返回上一层参数的原因。

我们在使用递归函数的时候,会遇到一种错误就是栈溢出,系统报出异常
Segmentation fault(并不代表所有的Segmentation fault异常都是栈溢出),如果你使用的是递归,你应该检查一下是不是无限递归了,那样就会使栈溢出。

其实在企业项目开发中一般是不使用递归的,因为项目较大,参数和全局变量等数据会非常多,使用递归很容易判断不成分return条件,很有可能会导致无限递归或者递归过深,造成栈溢出,况且递归会耗大量的时间。

若有误,请指教!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值