Stack源码解析
一封不动的源代码 + 注释
Stack继承了Vector,学习了Vector再来学习Stack就变得很简单。
/*
* Copyright (c) 1994, 2010, Oracle and/or its affiliates. All rights reserved.
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*
*/
package java.util;
/**
* Stack是last-in-first-out (LIFO) 的。它继承Vector,并额外提供了push、pop、peek、empty、search这几个方法
* 当stack被第一次创建时,它包含0个元素。
* Deque接口和它的实现是更强大的先进先出的栈的实现。
*/
public
class Stack<E> extends Vector<E> {
/**
* Creates an empty Stack.
*/
public Stack() {
}
/**
* 添加元素的到栈顶。表现为Vector在尾部添加元素
*
* @param item 要添加的元素
* @return 被添加的元素
* @see java.util.Vector#addElement
*/
public E push(E item) {
addElement(item);
return item;
}
/**
* 返回栈顶元素,并将其从栈中删除
*
* @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);
}
/**
* 判断栈是否为空
*
* @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;
}
/** use serialVersionUID from JDK 1.0.2 for interoperability */
private static final long serialVersionUID = 1224463164541339165L;
}