栈是一种基于后进先出的数据结构。实现的栈的方式有数组和链表两种数据结构。下面我们来看看java中的Stack源码解析。

 

     //Stack栈继承了 Vector方法,Vector方法是内部是数组实现的,即java中Stack 也是通过数组实现的。下面我们看看Stack如何通过Vector中的方法实现先进后出,实现压栈和出站的

     public   class Stack<E> extends Vector<E> {

                

          /**
           * Creates an empty Stack.
          */
        public Stack() {     }   //对外的构造器实现

     

            /**

            *Pushes an item onto the top of this stack.

             *将一个元素压如栈顶

            * /

           public E push(E item) {

            addElement(item);//调用vector 中的addElement(E item)方法 ,大家可以看看Vector中该方法是如何实现的,观看源码可知将这个元素添加到了数组的末尾,要是实现先进后出,也就是要把数组的末尾当做栈顶

                                    //顾猜测可以可知出站必然也要从数组的尾部开始,这样才能实现栈的特点。

            return item;
          }

         

           

       /**
        * Removes the object at the top of this stack and returns that
        * object as the value of this function.

           移除一个元素从栈顶,并返回移除的元素
      *  /

            public synchronized E pop() {
                     E obj;
                    int len = size();

                    obj = peek();//获取栈顶元素
                    removeElementAt(len - 1);//移除数组末尾的元素,从新增也是添加到数组末尾,可以把数组末尾看做栈顶

                    return obj;
            }

     

        

          /**
          *    Looks at the object at the top of this stack without removing it
           *    from the stack.

               查看栈顶元素不进行出栈(移除)
          */

           public synchronized E peek() {
              int len = size();

              if (len == 0)
             throw new EmptyStackException();
             return elementAt(len - 1);
       }

      

        

       /**
       * Tests if this stack is empty.

        */

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

        }

 

          

       /**
       * Returns the 1-based position where an object is on this stack.
       * If the object <tt>o</tt> occurs as an item in this stack, this
       * method returns the distance from the top of the stack of the
       * occurrence nearest the top of the stack; the topmost item on the
       * stack is considered to be at distance <tt>1</tt>. The <tt>equals</tt>
       * method is used to compare <tt>o</tt> to the
       * items in this stack.

        *获取距离栈顶最近的元素的位置

        */

          public synchronized int search(Object o) {
                  int i = lastIndexOf(o);//从数组末尾开始遍历,取距离栈顶最近的元素

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

 java中Stack栈的实现,是通过Vector集合中的方法来实现相应的压栈(push)和出栈(pop),即通过将数组元素的末尾作为栈顶,压栈和出栈从数组尾部进行,从而实现栈的新进后出的功能。栈中的元素放在

Object[]数组中,感兴趣的同学可以自己通过数组来白板编程实现栈。这里重点是介绍java中栈的实现,估不在做解释。

 

 

posted on 2018-07-03 10:53  蔡苗  阅读(185)  评论(0编辑  收藏  举报