这两个接口都为泛型接口,定义简单
先来看一看Iterable接口,@since 1.5。
而Iterable存在的目的就是使目标可以使用foreach循环
public interface Iterable {
Iterator iterator();
}
里面只有一个方法,就是返回一个Iterator,用于迭代。
我们马上来看一看Iterator接口
public interface Iterator {
boolean hasNext();
E next();
void remove();
}
也很简单,三个方法,一个判断是否有后续元素,一个获取后续元素,一个删除当前元素。
这里要注意remove方法,因为是删除当前元素,所以调用remove方法前,至少要调用一次next方法。
一般实现时通过一个标识变量,在next方法中修改为可remove状态,在remove方法中先判断标识,然后remove,最后变量改为不可remove状态。
public class MyList implements Iterable {
// 定义一个数组
private String[] list = { "A", "B", "C" };
// 实现Iterable接口
public Iterator<String> iterator() {
return new MyIterator();
}
// 实现Iterator接口
public class MyIterator implements Iterator<String> {
private int i = 0;
public boolean hasNext() {
return i < 3;
}
public String next() {
return list[i++];
}
public void remove() {
// TODO 我比较懒,这里和我要测的foreach关系不大,就不写了。
}
}
public static void main(String args[]) {
MyList list = new MyList();
for (String var : list) {
System.out.println(var);
}
}
}
输出结果
A
B
C
Iterable定义在1.5版本,Itertor定义在1.2版本。
而定义在最初的1.0版本用于枚举和迭代的,是Enumeration接口。
Itertor是作为Enumeration的替代,为了向下兼容,Enumeration并没有标注弃用
public interface Enumeration {
boolean hasMoreElements();
E nextElement();
}
Itertor相比Enumeration有两点改进
1.增加了remove方法
2.简化了方法名。