刚入java不久的程序猿,对于简单的使用已毫不满足,最终为了一探究竟,翻开了JDK的源码,以下观点为自己的理解及看了多篇博客的总结,欢迎各位大神指出不对的地方,当然也欢迎和我一样刚学的同学,一起加油努力吧~~
Stack源码解析 |
Stack,栈,我想大家应该都不陌生,尤其经常会遇到的StackOverFlow,栈溢出异常,源码里是这么介绍栈的,后进先出(LIFO),什么叫后进先出呢,举个例子,可能有些不恰当,能理解就行,比如有一个圆形的罐子,你往罐子里放饼干,一块一块的往里放,最终罐子会装满,先放进去的饼干会在罐子最底下,但是当我们想拿饼干吃的时候,都是从最上面一块一块拿,后放进去的却先拿出来了。相信大家多少有点了解这个概念了,下面直接看源码,Stack的源码比较少,就直接列出来了
public
class Stack<E> extends Vector<E> {
/**
* 空的构造,创建一个Stack
*/
public Stack() {
}
/**
* 将元素放入栈中,调用了Vector的方法
*/
public E push(E item) {
addElement(item);
return item;
}
/**
* 移除栈最顶端的元素
*/
public synchronized E pop() {
E obj;
int len = size();
obj = peek();
removeElementAt(len - 1);
return obj;
}
/**
* 查看最顶端的元素但不移除
*/
public synchronized E peek() {
int len = size();
if (len == 0)
throw new EmptyStackException();
return elementAt(len - 1);
}
/**
* 判断栈是否为空
*/
public boolean empty() {
return size() == 0;
}
/**
* 查看某个元素是否在栈中存在
*/
public synchronized int search(Object o) {
int i = lastIndexOf(o);
if (i >= 0) {
return size() - i;
}
return -1;
}
/** 版本号 */
private static final long serialVersionUID = 1224463164541339165L;
}
上面的源码大致标注了下,都比较简单,Stack结构也比较明了,继承了Vector,源码么,大致看下理解下就行,主要还是栈后进先出需要记得,大致了解下pop与peek方法即可