您的位置:首页 > 编程语言 > Java开发

Java 集合系列 06 Stack详细介绍(源码解析)和使用示例

2014-05-29 09:55 1306 查看
java 集合系列目录:

Java 集合系列 01 总体框架

Java 集合系列 02 Collection架构

Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例

Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例

Java 集合系列 05 Vector详细介绍(源码解析)和使用示例

Java 集合系列 06 Stack详细介绍(源码解析)和使用示例

Java 集合系列 07 List总结(LinkedList, ArrayList等使用场景和性能分析)

Java 集合系列 08 Map架构

Java 集合系列 09 HashMap详细介绍(源码解析)和使用示例

Java 集合系列 10 Hashtable详细介绍(源码解析)和使用示例

Java 集合系列 11 hashmap 和 hashtable 的区别

Java 集合系列 12 TreeMap

Java 集合系列 13 WeakHashMap

Java 集合系列 14 hashCode

Java 集合系列 15 Map总结

Java 集合系列 16 HashSet

Java 集合系列 17 TreeSet

第1部分 Stack介绍

Stack简介

Stack是栈。它的特性是:先进后出(FILO, First In Last Out)。

java工具包中的Stack是继承于Vector(矢量队列)的,由于Vector是通过数组实现的,这就意味着,Stack也是通过数组实现的而非链表。当然,我们也可以将LinkedList当作栈来使用!

Stack的继承关系

java.lang.Object
↳     java.util.AbstractCollection<E>
↳     java.util.AbstractList<E>
↳     java.util.Vector<E>
↳     java.util.Stack<E>

public class Stack<E> extends Vector<E> {}


Stack和Collection的关系如下图





Stack的构造函数

Stack只有一个默认构造函数,如下:

Stack()


Stack的API

Stack是栈,它常用的API如下:

boolean       empty()
synchronized E             peek()
synchronized E             pop()
E             push(E object)
synchronized int           search(Object o)


由于Stack和继承于Vector,因此它也包含Vector中的全部API

第2部分 Stack源码解析(基于JDK1.7.0_45)

Stack的源码非常简单,下面我们对它进行学习。

package java.util;

public
class Stack<E> extends Vector<E> {
// 版本ID
private static final long serialVersionUID = 1224463164541339165L;

// 构造函数
public Stack() {
}

// push函数:将元素存入栈顶
public E push(E item) {
// 将元素存入栈顶。
// addElement()的实现在Vector.java中
addElement(item);

return item;
}

// pop函数:返回栈顶元素,并将其从栈中删除
public synchronized E pop() {
E    obj;
int    len = size();

obj = peek();
// 删除栈顶元素,removeElementAt()的实现在Vector.java中
removeElementAt(len - 1);

return obj;
}

// peek函数:返回栈顶元素,不执行删除操作
public synchronized E peek() {
int    len = size();

if (len == 0)
throw new EmptyStackException();
// 返回栈顶元素,elementAt()具体实现在Vector.java中
return elementAt(len - 1);
}

// 栈是否为空
public boolean empty() {
return size() == 0;
}

// 查找“元素o”在栈中的位置:由栈底向栈顶方向数
public synchronized int search(Object o) {
// 获取元素索引,elementAt()具体实现在Vector.java中
int i = lastIndexOf(o);

if (i >= 0) {
return size() - i;
}
return -1;
}
}


转载:/article/4709035.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: