刚入java一年的萌新,对于简单的使用已毫不满足,最终为了一探究竟,翻开了JDK的源码,以下观点为自己的理解及看了多篇博客的总结,欢迎各位大神指出不对的地方,当然也欢迎和我一样刚学的同学,一起加油努力吧~~
Stack源码解析 |
Stack,栈,我想大家应该都不陌生,尤其经常会遇到的StackOverFlow,栈溢出异常,源码里是这么介绍栈的,后进先出(LIFO),什么叫后进先出呢,举个例子,可能有些不恰当,能理解就行,比如有一个圆形的罐子,你往罐子里放饼干,一块一块的往里放,最终罐子会装满,先放进去的饼干会在罐子最底下,但是当我们想拿饼干吃的时候,都是从最上面一块一块拿,后放进去的却先拿出来了。相信大家多少有点了解这个概念了,下面直接看源码,Stack的源码比较少,就直接列出来了
publicclass 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方法即可
新闻热点
疑难解答