zoukankan      html  css  js  c++  java
  • java源码解析——Stack类

    在java中,Stack类继承了Vector类。Vector类和我们经常使用的ArrayList是类似的,底层也是使用了数组来实现,只不过Vector是线程安全的。因此可以知道Stack也是线程安全的。

    Vector为Stack提供了大部分的操作,Stack只需要对添加和取出操作加以限制即可,Stack类的底层源码是非常简单的。

    public E push(E item) {
            addElement(item);
    
            return item;
        }

    首先是新增了一个push操作,这个方法并没有用synchronized关键字修饰,这是因为addElement()方法已经是线程安全的了。

    public synchronized E pop() {
            E       obj;
            int     len = size();
    
            obj = peek();
            removeElementAt(len - 1);
    
            return obj;
        }
     public synchronized E peek() {
            int     len = size();
    
            if (len == 0)
                throw new EmptyStackException();
            return elementAt(len - 1);
        }

    这里新增了栈的pop操作,取出栈顶的元素,并且将其移除。

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

    判断栈是否为空

    public synchronized int search(Object o) {
            int i = lastIndexOf(o);
    
            if (i >= 0) {
                return size() - i;
            }
            return -1;
        }

    查找栈中元素

    这基本上就是Stack中所有的代码了,这里没有涉及到栈是采用哪种数据结构去实现,因为这些由Vector类实现好了。

  • 相关阅读:
    Java Jsch SFTP 递归下载文件夹
    spring-jms,spring-boot-starter-activemq JmsTemplate 发送方式
    Spring Boot 入门之消息中间件篇(转发)
    Springboot websocket使用
    FinalCutPro快捷键
    基本CSS布局三
    As Simple as One and Two
    Game of Credit Cards
    WOW Factor
    Lose it!
  • 原文地址:https://www.cnblogs.com/YESheng/p/3664113.html
Copyright © 2011-2022 走看看