一个关于Iterator迭代器的小例子。
MyIterableList.java
import java.util.ArrayList;
import java.util.Iterator;
/**
* 继承抽象列表类 , 实现了Iterator<T>接口,这个要注意区分 Iterable<T>
*/
class MyIterableList<E> extends ArrayList implements Iterator<E> {
private E key; //类的类型限制参数,用于控制类的实例化成员的类型
public E getKey() {
return key;
}
public MyIterableList(){
}
public MyIterableList(E key) { //带参数的构造器
this.key = key;
}
private int cursor = 0; // 记录了当前访问的集合元素的下标
/*判断迭代器是否能够继续迭代,返回true表示迭代器当前有可迭代元素*/
@Override
public boolean hasNext() {
return cursor != size();
}
/*迭代出cursor所指的当前列表元素*/
@Override
@SuppressWarnings("unchecked")
public E next() {
int i = cursor;
E next = (E) get(i);
cursor = i + 1;
return next;
}
/*Iterator接口另一方法,通常不推荐使用*/
@Override
public void remove() {
//从底层集合中删除此迭代器返回的最后一个元素,这里不处理操作,选择抛出异常
throw new UnsupportedOperationException("不支持该操作");
}
}
入口:
public static void main(String[] args) {
MyIterableList<Integer> mil = new MyIterableList<>();
mil.add(1203);
mil.add(11);
mil.add(567);
while (mil.hasNext()) {
System.out.println(mil.next());
// mil.remove();/*调用此方法引发会引发异常*/
}
}
测试结果: