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
0 Comments