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()方法。