//首先,你的自定义类要实现Iterable接口(java.long.Iterable)①
public class Stack implements Iterable{
//类体
}
//Iterable接口(java.long.Iterable),它的内部只有一个iterator方法,这个方法的功能是返回一个Iterator(迭代器)对象,所以你的自定义类里要有这个方法。
public interface Iterable{
Iterator iterator();
}
//迭代器是一个实现了Iterator接口的类的对象②
//该接口为
public interface Iterator{
boollean hasNext();
Itemnext();
void remove();
}
③这个接口的实现类(迭代器)是你所自定义的引用类型的一个内部类
举个栗子,这是一个实现了迭代的、基于链表的栈:
import java.util.Iterator;
①//实现了Iterable接口
public class Stack implements Iterable{
private Nodefirst;
private int N;
private class Node{
Item item;
Node next;
}
public boolean isEmpty(){
return first==null;
}
public void push(Itemitem){
Node oldfirst=first;
first=new Node();
first.item=item;
first.next=oldfirst;
N++;
}
public Item pop(){
Itemitem=first.item;
first=first.next;
N--;
return item;
}
②//Iterable接口内的iterator方法
public Iterator iterator(){
return new ListIterator();//返回了一个迭代器
}
//这个迭代器没有实现remove方法
//迭代器要实现Iterator接口
③private class ListIterator implements Iterator{
private Node current=first;
public boolean hasNext(){
return current==null;
}
public Item next(){
Item item=current.item;
current=current.next;
return item;
}
}
}
网友评论