package org.cgz.study;
import java.io.Serializable;
import java.util.EmptyStackException;
import java.util.Vector;
/**
* Java实现Stack
* 可以通过继承或组合ArrayList(Vector)来实现栈
* @author Administrator
* @param
*/
public class MyStack implements Cloneable,Serializable{
//JDK中的栈是通过继承Vector来实现的.
//为啥要用Vector来实现? 因为栈的操作都是在栈顶.Vector底层是数组.栈的操作可以在数组的末端进行的.而使用数组线性表要比使用链表操作简单效率也高点.
//相比之下,使用组合可能会更好一些,因为它可以定义一个全新的栈类,而不需要继承数组线性表中不必要和不合适的方法.
private Vector list = new Vector();
/**
* 在栈顶压入元素
* @param e
*/
public E push(E e) {
list.addElement(e);
return e;
}
/**
* 弹出栈顶元素
* @param e
* @return
*/
public synchronized E pop() {
E e;
intsize = size();
e = peek();
list.removeElementAt(size - 1);
return e;
}
/**
* 获取栈顶元素
* @return
*/
public synchronized E peek() {
intsize = size();
if (size == 0) {
throw new EmptyStackException();
}
return list.elementAt(size - 1);
}
/**
* 查找
* @param e
* @return
*/
public synchronized int search(E e) {
int index = list.lastIndexOf(e);
if (index >= 0) {
return size() - index;
}
return -1;
}
/**
* 栈的大小
* @return
*/
public int size() {
return list.size();
}
/**
* 栈是否为空
* @return
*/
public boolean isEmpty() {
return size() == 0;
}
private static final long serialVersionUID = 5476861602556454675L;
}