zoukankan      html  css  js  c++  java
  • java集合系列——List集合之Stack介绍(五)

    1.Stack的简介

    Stack 类表示后进先出(LIFO)的对象堆栈。它通过五个操作对类 Vector 进行了扩展 ,允许将向量视为堆栈。它提供了通常的 push 和 pop 操作,以及取堆栈顶点的 peek 方法、测试堆栈是否为空的 empty 方法、在堆栈中查找项并确定到堆栈顶距离的 search 方法。
    因为它继承自Vector,那么它的实现原理是以数组实现堆栈的。如果要以链表方式实现堆栈可以使用LinkedList!

    2.Stack的继承关系

    java.lang.Object
      继承者 java.util.AbstractCollection<E>
          继承者 java.util.AbstractList<E>
              继承者 java.util.Vector<E>
                  继承者 java.util.Stack<E>
    所有已实现的接口:
    Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>, RandomAccess
    

    并且从类 java.util.Vector 继承的字段

    capacityIncrement, elementCount, elementData 
    

    从类 java.util.AbstractList 继承的字段

    modCount
    

    3.Stack的API
    Stack API

    Stack只有下面四个方法!由于Stack继承了Vector ,它也有Vector的API方法!

    boolean	empty() 
    	  测试堆栈是否为空。
    E	peek() 
    	  查看堆栈顶部的对象,但不从堆栈中移除它。
    E	pop() 
    	  移除堆栈顶部的对象,并作为此函数的值返回该对象。
    E	push(E item) 
    	  把项压入堆栈顶部。
    int	search(Object o) 
    	  返回对象在堆栈中的位置,以 1 为基数。
    
    

    4.源码

    public
    class Stack<E> extends Vector<E> {
        /**
         * 创建一个空堆栈。
         */
        public Stack() {
        }
    
        /**
         * 把项压入堆栈顶部。其作用与下面的方法完全相同:
    	 *
         * item - 压入堆栈的项。
         *
         * @return  返回 item 参数。
         */
        public E push(E item) {
            addElement(item);//是Vector中的方法,详细实现请查看Vector的源码
    
            return item;
        }
    
        /**
         * 移除堆栈顶部的对象,并作为此函数的值返回该对象。
         * 
         * @return  堆栈顶部的对象( Vector 对象中的最后一项)。
         * @throws  EmptyStackException  if this stack is empty.
         */
        public synchronized E pop() {//注意此方法是 synchronized修饰的,同步方法
            E       obj;
            int     len = size();
    
            obj = peek();
            removeElementAt(len - 1);//是Vector中的方法,详细实现请查看Vector的源码
    
            return obj;
        }
    
        /**
         * 查看堆栈顶部的对象,但不从堆栈中移除它。
         * 
         */
        public synchronized E peek() {
            int     len = size();
    
            if (len == 0)
                throw new EmptyStackException();
            return elementAt(len - 1);
        }
    
        /**
         * Tests if this stack is empty.
         *
         * 测试堆栈是否为空。 为空返回 true
         */
        public boolean empty() {
            return size() == 0;
        }
    
        /**
         * 返回对象在堆栈中的位置,以 1 为基数。如果对象 o是堆栈中的一个项,
    	 * 此方法返回距堆栈顶部最近的出现位置到堆栈顶部的距离;
    	 * 堆栈中最顶部项的距离为 1。使用 equals 方法比较 o 与堆栈中的项。
         *
         * @param   o   the desired object. o - 目标对象。
         * @return  the 1-based position from the top of the stack where
         *          the object is located; the return value <code>-1</code>
         *          indicates that the object is not on the stack.
    	 * 返回 : 对象到堆栈顶部的位置,以 1 为基数;返回值 -1 表示此对象不在堆栈中。
         */
        public synchronized int search(Object o) {//注意此方法为  synchronized
            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;
    }
    

    5.总结

    (1) Stack实际上也是通过数组去实现的。实际调用的实现方法都是Vector中的方法!

    • push时(即,将元素推入栈中),是通过将元素追加的数组的末尾中。

    • peek时(即,取出栈顶元素,不执行删除),是返回数组末尾的元素。

    • pop时(即,取出栈顶元素,并将该元素从栈中删除),是取出数组末尾的元素,然后将该元素从数组中删除。

    (2) Stack继承于Vector,Stack拥有着Vector的属性和功能!


    欢迎访问我的csdn博客,我们一同成长!

    "不管做什么,只要坚持下去就会看到不一样!在路上,不卑不亢!"

    博客首页:http://blog.csdn.net/u010648555

  • 相关阅读:
    大胆决定+细致用功, 才可能改变命运
    采用用同步编程的方式实现跨进程异步获取数据
    关于DataGridViewComboBoxCell修改后提交数据源
    学习:如何具有坚韧的性格
    汉语-成语:坚韧不拔
    汉语-词语:坚韧
    阿里云-OSS-Help-SKD参考-.NET:前言
    阿里云-OSS-OSS管理控制台:Bucket列表
    阿里云-OSS-OSS管理控制台:概览
    汉语-词语:推理
  • 原文地址:https://www.cnblogs.com/aflyun/p/6492757.html
Copyright © 2011-2022 走看看