返回 登录
0

Java Stack用法

Stack是一个后进先出(last in first out,LIFO)的堆栈,在Vector类的基础上扩展5个方法而来
Deque(双端队列)比起Stack具有更好的完整性和一致性,应该被优先使用,Stack本身通过扩展Vector而来,而Vector本身是一个可增长的对象数组( a growable array of objects)那么这个数组的哪里作为Stack的栈顶,哪里作为Stack的栈底?
查看Stack源码:
//Stack

public class Stack extends Vector
{
    public Stack()
    {
    }
    //推obj入栈
    public Object push(Object obj)
    {
        addElement(obj);
        return obj;
    }
    //返回栈顶数据,并移除
    public synchronized Object pop()
    {
        int i = size();
        Object obj = peek();
        removeElementAt(i - 1);
        return obj;
    }
    //返回栈顶数据,不移除
    public synchronized Object peek()
    {
        int i = size();
        if(i == 0)
            throw new EmptyStackException();
        else
            return elementAt(i - 1);
    }
    //是否为空
    public boolean empty()
    {
        return size() == 0;
    }
   //返回离栈顶最近的obj的位置,不存在返回-1
    public synchronized int search(Object obj)
    {
        int i = lastIndexOf(obj);
        if(i >= 0)
            return size() - i;
        else
            return -1;
    }

    private static final long serialVersionUID = 1224463164541339165L;
}

结构:

图片描述

测试:

package test;
import java.util.Stack;
public class testStack {
    public static void main(String[] args) {
        Stack<String> ts = new Stack<String>();
        System.out.println("======is empty:"+ts.empty());
        ts.push("1");
        ts.push("5");
        ts.push("2");
        ts.push("3");
        ts.push("2");
        ts.push("4");
        System.out.println("======peek:"+ts.peek());
        System.out.println("======size after peek:"+ts.size());
        System.out.println("======search not exists:"+ts.search(2));
        System.out.println("======search exists:"+ts.search("2"));
        System.out.println("======peek:"+ts.pop());
        System.out.println("======size after pop:"+ts.size());
    }
}

结果:
======is empty:true
======peek:4
======size after peek:6
======search not exists:-1
======search exists:2
======peek:4
======size after pop:5

学习Java的同学注意了!!!
学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:454297367 我们一起学Java!

评论