//首先宰衙,你的自定義類要實(shí)現(xiàn)Iterable接口(java.long.Iterable)①
public class Stack implements Iterable{
//類體
}
//Iterable接口(java.long.Iterable)旷赖,它的內(nèi)部只有一個(gè)iterator方法蕉扮,這個(gè)方法的功能是返回一個(gè)Iterator(迭代器)對象,所以你的自定義類里要有這個(gè)方法角溃。
public interface Iterable{
Iterator iterator();
}
//迭代器是一個(gè)實(shí)現(xiàn)了Iterator接口的類的對象②
//該接口為
public interface Iterator{
boollean hasNext();
Itemnext();
void remove();
}
③這個(gè)接口的實(shí)現(xiàn)類(迭代器)是你所自定義的引用類型的一個(gè)內(nèi)部類
舉個(gè)栗子拷获,這是一個(gè)實(shí)現(xiàn)了迭代的、基于鏈表的棧:
import java.util.Iterator;
①//實(shí)現(xiàn)了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接口內(nèi)的iterator方法
public Iterator iterator(){
return new ListIterator();//返回了一個(gè)迭代器
}
//這個(gè)迭代器沒有實(shí)現(xiàn)remove方法
//迭代器要實(shí)現(xiàn)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;
}
}
}