一、Stack 栈

      栈是一种特殊的线性表,仅能在线性表的一端操作,栈顶允许操作,栈底不允许操作。Stack将底层数组的尾部看作栈顶。

      特点:后进先出(LIFO -> last-in-fisrt-out)、线程安全

      继承:Vector,底层使用动态数组实现,新增5个API

二、API

    1、压栈:在栈顶插入元素,调用Vector.addElement追加元素

  public E push(E item) {
        // 数组末尾增加元素
        addElement(item);
        // 返回插入的元素,即栈顶元素
        return item;
  }

   2、出栈:栈顶出栈,移除栈顶元素并返回,调用Vector.removeElementAt移除末尾元素,栈空时抛出异常EmptyStackException,使用syschronized保证线程安全

    public synchronized E pop() {
        E       obj;
        // 获取底层数组长度,即栈内元素数量
        int     len = size();
        // 调用自身peek()方法,获取栈顶元素
        obj = peek();
        // 出栈,移除栈顶,即底层数组末尾元素
        removeElementAt(len - 1);
        // 返回出栈元素
        return obj;
    }

   3、查看栈顶元素,不移除,调用Vector.elementAt获取末尾元素,栈空时抛出异常EmptyStackException,使用syschronized保证线程安全

    public synchronized E peek() {
        // 获取底层数组长度,即栈内元素数量
        int     len = size();
        // 栈空时抛出异常
        if (len == 0)
            throw new EmptyStackException();
        // 返回栈顶元素
        return elementAt(len - 1);
    }

   4、判断是否栈空

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

 5、查找栈中是否包含某元素,存在则返回从栈顶开始计数的位置,即Vector中倒数位置;不存在则返回-1,使用syschronized保证线程安全

    public synchronized int search(Object o) {
        // 底层数组中从后往前查找元素,并返回下标,不存在时返回-1
        int i = lastIndexOf(o);
        // 元素存在时返回倒数位置
        if (i >= 0) {
            return size() - i;
        }
        // 元素不存在时返回-1
        return -1;
    }

       

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐