----------------------android培训、java培训、期待与您交流! ----------------------
栈(stack)是实现后进先出协议的一种包容器,这意味着包容器中惟一可访问的对象是插入到栈中的最后一个对象,可以用一堆书作一个很好的类比,当我们没有把压在某本书上的其他所有的书移走时,我们不能拿到这本书。见图1
图1 一堆书
Java中的Stack类
Java集合框架中包含了一个Stack类,这个定义在java.util包中的类如图2所示:
import java.util.*;
public class StackDemo extends Vector
{
public boolean empty()
{
return size() ==0;
}
public Object peek()
{
if (size() ==0) throw new EmptyStackException();
return elementAt(size()-1);
}
public Object pop()
{
Object object = peek();
removeElementAt(size()-1);
return object;
}
public Object push(Object object)
{
addElement(object);
return object;
}
public int search(Object object)
{
int i = lastIndexOf(object);
if (i<0) return -1 ; //object is not on this stack
return size()-1;
}
public StackDemo()
{
}
}
Stack 类是Vector类的一个子类, 它以一个Vector的形式来实现Stack,把向量中的最后一个元素当成栈顶元素。
方法empty()当且仅当栈zhogn元素个数为0时返回true.
方法peek()将栈顶元素返回,但并不将该元素从栈中移去,它使用Vector.elementAt(int) 方法来访问向量中最后的那个元素,当栈为空时,将抛出EmptyStackExceptio异常。
方法pop()将栈顶元素从栈中移出后,将栈顶元素返回,它使用Vector.removeElementAt(int) 方法将栈顶元素移出。请注意因为该方法调用了peek()方法,所以,在栈为空时,它也可以产生EmptyStackException异常。
方法push(Object) 将定元插入栈顶,它使用了Vector.addElement(Object) 方法,它将在向量末尾加入该对象。
方法search(Object)返回给丁对象在栈中的位置,当给定对象不在栈中时,它返回-1。该方法调用了Vector.lastIndexOf(Object)方法,它使用Equals()方法对向量中的每个对象与给定对象进行比较。当向量中包含若干个与给定对象相等的对象时,将返回最后一个所在的位置,这是一个与栈顶最为接近的对象,使用从1开始的位置标识办法,栈顶元素为位置1。
例1 查看栈顶对象。
public class Ex0601
{
public static void main(String[] args)
{
java.util.Stack stack = new java.util.Stack();
System.out.println("stack.size()="+stack.size());
System.out.println("stack.peek()="+stack.peek());
}
}
该程序的输出为:
结果表明对一个空栈对象调用peek()方法时将产生一个EmptyStackException()异常。
例2 处理EmptyStackException 异常
import java.util.Stack;
public class EmptyStackExceptionTest
{
public static void main(String [] args)
{
System.out.println("Example EmptyStackException: Handling an EmptyStackException exception");
Stack stack = new Stack();
print(stack);
}
private static void print(Stack stack)
{
System.out.println("Now in print(Stack):");
System.out.println("stack.size() = " + stack.size());
try
{
System.out.println("satck.peek() = " + stack.peek());
}
catch (java.util.EmptyStackException e)
{
System.out.println(e + ": The stack is empty.");
}
}
}
该程序的输出为:
这里显示了处理EmptyStackException异常的一种简单方法。
例3 测试push() 和pop()方法
import java.util.Stack;
public class Ex0603
{
public static void main(String[] args)
{
Stack stack = new Stack();
stack.push("Brazil");
stack.push("Canada");
stack.push("France");
stack.push("Mexico");
stack.push("Russia");
stack.push("Swenden");
stack.push("Brazil");
stack.push("Turkey");
print(stack);
System.out.println("stack.search(\"Brazil\")="+stack.search("Brazil"));
System.out.println("stack.pop()="+stack.pop());
System.out.println("stack.pop()="+stack.pop());
print(stack);
System.out.println("stack.search(\"Brazil\")="+stack.search("Brazil"));
}
private static void print(Stack stack)
{
System.out.println(stack);
System.out.println("stack.size()="+stack.size());
try
{
System.out.println("stack.peek()="+stack.peek());
}
catch (java.util.EmptyStackException e)
{
System.out.println(e+":The stack is empty");
}
}
}
上述程序的输出为:
在将8个字符串对象压入栈后,上述程序调用print(Stack)方法来显示栈信息,然后,它查找”Brazil”对象,并将”Turkey”对象从栈中弹出,然后再次调用print(Stack) 方法。注意search(Object)将返回2,意味着栈中有”Brazil”对象的一个拷贝,它位于从栈顶数起的第二个位置(另一个拷贝位于栈底)。
然后,它调用pop()两次,从而首先将”Turkey”并继而将”Brazil”对象从栈中移出,然后最后一次调用print(Stack)来显示栈中的6个元素,”Sweden”位于栈顶,而”Brazil”位于从栈顶数起的第六个元素。
注意调用System.out.println(stack)调用了Vector.toString()方法,它将返回显示元素列表的一个字符串,该字符串用方括号与其他字符相分割。
---------------------- android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima