迭代器是一种很好用的迭代元素的方法,常用于Arraylist等Colloctions集合元素的迭代,如果需要自己实现迭代方法,能用foreach,就很漂亮了。代码如下。
import java.util.*;
@SuppressWarnings("unchecked")
// Demo是一个动态数组类,要实现迭代器的功能必须实现Iterable接口并写一些配套的类和方法
class Demo<T> implements Iterable<T>{
private Object[] arr;
private int sz;
private int endIndex = 0;
Demo(int sz){
this.sz = sz;
arr = new Object[sz];
}
T[] add(T t){
if(endIndex==sz){
sz = sz*2;
arr = Arrays.copyOf(arr, sz);
}
arr[endIndex++] = t;
return (T[])arr;
}
T get(int index){
if(index>=endIndex)throw new RuntimeException("index outbound");
return (T)arr[index];
}
int size(){
return endIndex;
}
class Itr implements Iterator<T>{
private int l = 0;
private int r = endIndex;
@Override
public boolean hasNext() {
// 确定存在下一个
return l==r?false:true;
}
@Override
public T next() {
// 返回当下元素
return (T)arr[l++];
}
}
public Iterator<T> iterator(){
return new Itr();
}
public static void main(String[] args) {
Demo<Integer> d = new Demo<>(10);
d.add(1);
d.add(2);
Iterator<Integer> it = d.iterator();
for (Integer x: d) {
System.out.println(x);
}
}
}