java里Stack的peek方法是返回栈顶的元素但不移除它。

但Stack的pop方法是会移除的。

二、原因剖析:


     (1)这是JDK中的peek方法的源码


   /**

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

     * from the stack.

     *

     * @return  the object at the top of this stack (the last item

     *          of the <tt>Vector</tt> object).

     * @throws  EmptyStackException  if this stack is empty.

     */

    public synchronized E peek() {

        int     len = size();

 

 

        if (len == 0)

            throw new EmptyStackException();

        return elementAt(len - 1);

    }

   这是上述最后一行代码elementAt(len-1)方法的源码:

    public synchronized E elementAt(int index) {

        if (index >= elementCount) {

            throw new ArrayIndexOutOfBoundsException(index + " >= " + elementCount);

        }

        return elementData(index);

    }

这是上述elementData(index)方法的源码:

     E elementData(int index) {

        return (E) elementData[index];

    }

        当看到elementData[index]时就会发现java里的栈的实现是用数组来实现的。再返回去看peek()方法的源码会发现只是把 数组的最后一个元素(就是栈顶)返回来了,而没有做删除。

上述的 removeElementAt(len-1)方法的源码中,倒数第二行的代码的地方是将数组中存放的个数减少一个,然后将最后一个元素

设置位null值。也就验证了pop是会移除最后一个元素(也就是栈顶元素)的。


————————————————

版权声明:本文为CSDN博主「alan_gaohaodong」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/alan_gaohaodong/article/details/79278171