堆栈stack是一种后进先出的通过扩展Vector类而来的数据结构,即先放入的元素在逻辑上处于栈底,而后放入的元素位于栈顶。
常用方法为:push、pop、peek、empty、search等,下面分别列举这些方法:
Stack stack=new Stack();
String ss1="sun";
String ss2="moon";
String ss3="star";
stack.push(ss1); //把元素压入堆栈
stack.push(ss2);
stack.push(ss3);
System.out.println(stack); //程序输出:[sun, moon, star]
stack.pop(); //出栈
System.out.println(stack); //程序输出:[sun, moon]
//方法返回栈顶元素,但不做出栈操作
System.out.println(stack.peek()); //程序输出:moon
//方法用来判别堆栈是否为空,
System.out.println(stack.empty()); //程序输出:false
//方法返回查找对象的位置。从1开始
System.out.println(stack.search(ss1)); //程序输出:2
从jdk1.6的源码来看,stack是继承Vector类的:
public class Stack<E> extends Vector<E> {
/**
* Creates an empty Stack.
*/
public Stack() {
}
/**
* Pushes an item onto the top of this stack. This has exactly
* the same effect as:
* <blockquote><pre>
* addElement(item)</pre></blockquote>
*
* @param item the item to be pushed onto this stack.
* @return the <code>item</code> argument.
* @see java.util.Vector#addElement
*/
public E push(E item) {
addElement(item);
return item;
}
/**
* Removes the object at the top of this stack and returns that
* object as the value of this function.
*
* @return The object at the top of this stack (the last item
* of the <tt>Vector</tt> object).
* @exception EmptyStackException if this stack is empty.
*/
public synchronized E pop() {
E obj;
int len = size();
obj = peek();
removeElementAt(len - 1);
return obj;
}
/**
* Looks at the object at the top of this stack without removing it
* from the stack.
*
* @return the object at the top of this stack (the last item
* of the <tt>Vector</tt> object).
* @exception EmptyStackException if this stack is empty.
*/
public synchronized E peek() {
int len = size();
if (len == 0)
throw new EmptyStackException();
return elementAt(len - 1);
}
/**
* Tests if this stack is empty.
*
* @return <code>true</code> if and only if this stack contains
* no items; <code>false</code> otherwise.
*/
public boolean empty() {
return size() == 0;
}
/**
* Returns the 1-based position where an object is on this stack.
* If the object <tt>o</tt> occurs as an item in this stack, this
* method returns the distance from the top of the stack of the
* occurrence nearest the top of the stack; the topmost item on the
* stack is considered to be at distance <tt>1</tt>. The <tt>equals</tt>
* method is used to compare <tt>o</tt> to the
* items in this stack.
*
* @param o the desired object.
* @return the 1-based position from the top of the stack where
* the object is located; the return value <code>-1</code>
* indicates that the object is not on the stack.
*/
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;
细节方面:
1.pop与peek两种方法都返回的是栈顶元素,区别为pop做出栈动作,peek不做。
2.search返回的是与参数equal的与栈顶最近距离的元素与栈顶的距离。