五、 创建一个可预知的Stack迭代算子
如果PeekableStack类将要同Java中新的"for each"结构语句一起使用,那么你必须创建一个"Java标准的"Iterator。列表3显示出一个PeekableStackIterator类的实现。
在列表3中,迭代子实际上并没有以任何方式改变栈的值;代之的是,该迭代子追踪它在元素列表中的当前位置并且总是返回下一个元素。因为这个信息被存储在iteration类本身,所以有可能存在多个算子运行于相同的栈上。
下列程序用于测试可预知的栈。
package com.heatonresearch.examples.collections;
import java.util.*;
public class TestPeekableStack {
public static void main(String args[]) {
PeekableStack<Integer> stack = new
PeekableStack<Integer>();
stack.push(1);
stack.push(2);
stack.push(3);
for (int i : stack) { System.out.println(i); }
System.out.println("Pop 1:" + stack.pop());
System.out.println("Pop 2:" + stack.pop());
System.out.println("Pop 3:" + stack.pop());
}
}
如你所见,有三个项被添加到栈上去。然后,这三个项被使用新的"for each"结构语句显示出来。
for( int i: stack)
{
System.out.println( i );
}
因此,你看到怎样成功地实现一集合-它支持新型的J2SE惯例-既有泛型也有"for each"结构语句。如你所见,创建与J2SE 5.0中新型的结构相兼容的集合是相当容易的-这只需要利用泛型并且实现恰当的接口即可。你会发现这样的集合类被无缝地集成到J2SE 5.0中。
