stack有时也可以称为“后入先出”(lifo)集合。换言之,我们在堆栈里最后“压入”的东西将是以后第一个“弹出”的。和其他所有java集合一样,我们压入和弹出的都是“对象”,所以必须对自己弹出的东西进行“造型”。
一种很少见的做法是拒绝使用vector作为一个stack的基本构成元素,而是从vector里“继承”一个stack。这样一来,它就拥有了一个vector的所有特征及行为,另外加上一些额外的stack行为。很难判断出设计者到底是明确想这样做,还是属于一种固有的设计。
下面是一个简单的堆栈示例,它能读入数组的每一行,同时将其作为字串压入堆栈。
//: stacks.java
// demonstration of stack class
import java.util.*;
public class stacks {
static string[] months = {
"january", "february", "march", "april",
"may", "june", "july", "august", "september",
"october", "november", "december" };
public static void main(string[] args) {
stack stk = new stack();
for(int i = 0; i < months.length; i++)
stk.push(months[i] + " ");
system.out.println("stk = " + stk);
// treating a stack as a vector:
stk.addelement("the last line");
system.out.println(
"element 5 = " + stk.elementat(5));
system.out.println("popping elements:");
while(!stk.empty())
system.out.println(stk.pop());
}
} ///:~
months数组的每一行都通过push()继承进入堆栈,稍后用pop()从堆栈的顶部将其取出。要声明的一点是,vector操作亦可针对stack对象进行。这可能是由继承的特质决定的――stack“属于”一种vector。因此,能对vector进行的操作亦可针对stack进行,例如elementat()方法。
闽公网安备 35060202000074号