Java集合源码分析06----Stack源码分析

目录

简介

介绍

源码分析(基于jdk1.8)

案例


简介

    Stack模拟的是栈的操作,继承了Vector类,底层也是通过数组来实现的。栈的数据特点是先进后出(FILO,First In Last Out),即最后压入栈的元素,总是第一个弹出栈。由于Stack继承了Vector,所以线程安全,并且提供了操作队列的方法,可以随机访问,能克隆,能进行序列化和序列化传输。

介绍

1.构造方法

 public Stack() {}
  • 构建一个空的Stack.

2.内部方法

public E push(E item){}
public synchronized E pop() {}
public synchronized E peek() {}
public boolean empty() {}
public synchronized int search(Object o) {}
  • push(E item)----向栈顶压入一个元素。
  • pop()----返回栈顶的元素,并从栈里面移除。如果栈为空,将抛出EmptyStackException异常。
  • peek()----返回栈顶的元素,不执行删除操作。如果栈为空,将抛出EmptyStackException异常。
  • empty()----如果栈为空,返回true。
  • search(object o)----查找栈顶元素在栈中位置,返回元素到栈顶部的距离。

源码分析(基于jdk1.8)

public class Stack<E> extends Vector<E> {
     
  //创建空的Stack实例
    public Stack() {
    }

    //向栈顶压入一个指定元素,底层调用的addElement()方法,并返回存入的元素。
    public E push(E item) {
        addElement(item);

        return item;
    }

    //返回栈顶的元素,并从栈中移除。
    //如果栈为空,将抛出EmptyStackException异常
    public synchronized E pop() {
        E       obj;
        int     len = size();
        
        obj = peek();
        //移除最后一个元素。
        removeElementAt(len - 1);

        return obj;
    }

    //返回栈顶的元素,不执行移除操作。
    //如果栈为空,将抛出EmptyStackException异常
    public synchronized E peek() {
        int     len = size();

        if (len == 0)
            throw new EmptyStackException();
        //返回最后一个元素
        return elementAt(len - 1);
    }

    //如果栈为空,返回true。
    public boolean empty() {
        return size() == 0;
    }

    //查找栈中指定元素,返回元素到栈顶部的距离。
    public synchronized int search(Object o) {
      //返回栈中最后出现指定元素的位置。
        int i = lastIndexOf(o);

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

    /** use serialVersionUID from JDK 1.0.2 for interoperability */
    //序列化版本号
    private static final long serialVersionUID = 1224463164541339165L;
}

案例

Stack继承了Vector,所以拥有Stack的大部分方法,这里测试了栈的访问。

public class StackDemo {
  public static void main(String[] args) {
    Stack<String> stack = new Stack<>();
    for(String word:"this is a demo about stack".split(" ")) {
      stack.push(word);
    }
    System.out.println("peek----"+stack.peek());
    while(!stack.isEmpty()) {
      System.out.print(stack.pop()+" ");
    }
    System.out.println();
  }
}

运行结果:

peek----stack
stack about demo a is this 

可以看出先进栈的元素,后弹出栈。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值