设计目标
用户可以依次读取栈中的每个元素,但是不需要知道栈的内部结构。
Java解决方案
使Stack支持Iterable接口
什么是Iterable
就是包含一个返回迭代器接口的类。
什么是迭代器
迭代器就是包含hasNext和next两个方法的类。
为什么要使用Iterable
可以简化代码,也就是支持foreach语法
代码
第36行代码开始才是迭代器。
import
java.util.Iterator;
public
class
LinkedStack<T>
implements
Iterable<T> {
private
class
Node {
T value;
Node next;
}
private
Node first;
public
LinkedStack(){
}
public
void
push(T value){
Node node =
new
Node();
node.value = value;
node.next = first;
first = node;
}
public
T pop(){
T result = first.value;
first = first.next;
return
result;
}
public
boolean
isEmpty(){
return
first ==
null
;
}
@Override
public
Iterator<T> iterator() {
return
new
MyIterator();
}
private
class
MyIterator
implements
Iterator<T> {
private
Node current = first;
@Override
public
boolean
hasNext() {
return
current !=
null
;
}
@Override
public
T next() {
T result = current.value;
current = current.next;
return
result;
}
@Override
public
void
remove() {
throw
new
RuntimeException(
"not support"
);
}
}
}