Java Stack用法

java.util.Stack类简介 : http://blog.csdn.net/a19881029/article/details/9408649
Stack是一个后进先出(last in first out,LIFO)的堆栈,在Vector类的基础上扩展5个方法而来
Deque(双端队列)比起Stack具有更好的完整性和一致性,应该被优先使用,Stack本身通过扩展Vector而来,而Vector本身是一个可增长的对象数组( a growable array of objects)那么这个数组的哪里作为Stack的栈顶,哪里作为Stack的栈底?
查看Stack源码:
//Stack
public class Stack extends Vector
{
    public Stack()
    {
    }
    //推obj入栈
    public Object push(Object obj)
    {
        addElement(obj);
        return obj;
    }
    //返回栈顶数据,并移除
    public synchronized Object pop()
    {
        int i = size();
        Object obj = peek();
        removeElementAt(i - 1);
        return obj;
    }
    //返回栈顶数据,不移除
    public synchronized Object peek()
    {
        int i = size();
        if(i == 0)
            throw new EmptyStackException();
        else
            return elementAt(i - 1);
    }
    //是否为空
    public boolean empty()
    {
        return size() == 0;
    }
   //返回离栈顶最近的obj的位置,不存在返回-1
    public synchronized int search(Object obj)
    {
        int i = lastIndexOf(obj);
        if(i >= 0)
            return size() - i;
        else
            return -1;
    }

    private static final long serialVersionUID = 1224463164541339165L;
}

结构:



测试:
package test;
import java.util.Stack;
public class testStack {
	public static void main(String[] args) {
		Stack<String> ts = new Stack<String>();
		System.out.println("======is empty:"+ts.empty());
		ts.push("1");
		ts.push("5");
		ts.push("2");
		ts.push("3");
		ts.push("2");
		ts.push("4");
		System.out.println("======peek:"+ts.peek());
		System.out.println("======size after peek:"+ts.size());
		System.out.println("======search not exists:"+ts.search(2));
		System.out.println("======search exists:"+ts.search("2"));
		System.out.println("======peek:"+ts.pop());
		System.out.println("======size after pop:"+ts.size());
	}
}

结果:
======is empty:true
======peek:4
======size after peek:6
======search not exists:-1
======search exists:2
======peek:4
======size after pop:5

猜你喜欢

转载自donald-draper.iteye.com/blog/2330252