Java8源码-Stack
来源:互联网 发布:淘宝上哪家卖玉的店铺 编辑:程序博客网 时间:2024/05/19 05:34
学完了ArrayList、Vector、LinkedList的源码后,今天来学习Stack源码。参考的JDK版本为1.8。
Stack继承了Vector,学习了Vector再来学习Stack就变得很简单。Stack,栈,特点是先进后出(FILO, First In Last Out)。Stack是如何实现先进后出的?本文将详细讲解这个问题。
顶部注释
The
Stack
class represents a last-in-first-out (LIFO) stack of objects. It extends class Vector with five operations that allow a vector to be treated as a stack. The usual push and pop operations are provided, as well as a method to peek at the top item on the stack, a method to test for whether the stack is empty, and a method to search the stack for an item and discover how far it is from the top.
第一段大意为Stack是last-in-first-out (LIFO) 的。它继承Vector,并额外提供了push、pop、peek、empty、search这几个方法。
When a stack is first created, it contains no items.
第二段大意为当stack被第一次创建时,它包含0个元素。
A more complete and consistent set of LIFO stack operations is provided by the {@link Deque} interface and its implementations,
Deque<Integer> stack = new ArrayDeque<Integer>();
第三段大意为Deque接口和它的实现是更强大的先进先出的栈的实现。
Stack类层次结构
先来看看Stack的定义
public class Stack<E> extends Vector<E>
从中我们可以了解到
- Stack<E>:说明它支持泛型。
- extends Vector<<E>`:说明Vector的可序列化、随机访问效率高等等特性它都有。
下图是Stack的类结构层次图
如何查看类层次结构图可以参考我写过的一篇文章:
eclipse-查看继承层次图/继承实现层次图
全局变量
Stack的全局变量都是从Vector继承的。
构造方法
接下来,看Stack提供的构造方法。ArrayList提供了一种构造方法。
1.构造空Stack。
/** * Creates an empty Stack. */public Stack() {}
方法
public E push( E item)
/** * 添加元素的到栈顶。 * * @param item 要添加的元素 * @return 被添加的元素 * @see java.util.Vector#addElement */public E push(E item) { addElement(item); return item;}
public synchronized E pop()
/** * 返回栈顶元素,并将其从栈中删除 * * @return 栈顶元素 * @throws EmptyStackException 如果栈为空 */public synchronized E pop() { E obj; int len = size(); obj = peek(); removeElementAt(len - 1); return obj;}
**
/** * 返回栈顶元素,不删除。 * * @return 栈顶元素 * @throws EmptyStackException 如果栈为空 */public synchronized E peek() { int len = size(); if (len == 0) throw new EmptyStackException(); return elementAt(len - 1);}
public boolean empty()
/** * 判断栈是否为空 * * @return 栈是否有元素 */public boolean empty() { return size() == 0;}
**
/** * 栈底向栈顶方向遍历,查找指定对象o在栈中的位置。 * @param o 指定对象 * @return o的索引,如果没找到,返回-1 */public synchronized int search(Object o) { int i = lastIndexOf(o); if (i >= 0) { return size() - i; } return -1;}
Stack的学习就到这里了,List的学习到这里也告一段落了,下一篇文章将对List的各个实现类做总结。
更多文章:
- Java8容器源码-目录
- Java8容器源码-整体结构
- Java8容器源码-ArrayList
- ArrayList与迭代器模式
- Java8容器源码-Vector
- Vector与迭代器模式
- Java8容器源码-详解fail-fast
- Iterator与Enumeration
- Java8容器源码-LinkedList
- LinkedList与迭代器模式
- Java8容器源码-Stack
- Java8容器源码-List总结
- Java8容器源码-Map整体架构
- Java8容器源码-HashMap
- Java8容器源码-Hashtable(1)
- Java8容器源码-Hashtable(2)
原文地址:CSDN博客-潘威威的博客-http://blog.csdn.net/panweiwei1994/article/details/77163859
本文版权归作者所有,欢迎转载,但转载时请在文章明显位置给出原文作者名字(潘威威)及原文链接,否则作者将保留追究法律责任的权利。
- Java8源码-Stack
- java8的源码
- ConcurrentHashMap源码分析--Java8
- java8 ArrayList源码阅读
- java8 LinkedList源码阅读
- Java8 - HashMap源码
- Java8 - HashTable源码
- Java8 - LinkedHashMap源码
- Java8 - ArrayList源码
- Java8 - LinkedList源码
- Java8 - CopyOnWriteArrayList源码
- Java8 - PriorityQueue源码
- Java8 - IdentityHashMap源码
- Java8 - WeakHashMap源码
- ConcurrentHashMap源码分析--Java8
- Java8 - ArrayBlockingQueue源码
- java8 ArrayList源码阅读
- java8 LinkedList源码阅读
- 通过 Spring Security配置 解决X-Frame-Options deny 造成的页面空白
- 扫地机器人排行榜 扫地机器人哪个牌子好?
- 任务1:把一张图附到另一张图上(c++结合opencv)
- pycharm 教程(二)设置字体大小
- Linux中TCP listen()的参数
- Java8源码-Stack
- 概率基础1-事件与概率
- 将从数据库中获取的数据写入到Excel表中
- Spring中的配置类
- 发送手机验证码工具类
- HDU 6078 Wavel Sequence【动态规划】
- MFC+opencv遇到的问题汇总
- Android Studio导入第三方java类库含源代码包
- java集合之HashMap