说明
为对象使用迭代器 iterator
提供统一调用,也就是说:Iterable
与 Iterator
搭配使用
java 集合的顶级接口 Collection
就实现了 Iterable
接口,也就是说 java 集合类都实现了 Iterable
接口
作用
返回
Iterator
对象支持
for each
循环
源码
package java.lang;
public interface Iterable<T> {
// 返回一个内部元素为T类型的迭代器
Iterator<T> iterator();
}
例子
实现简单的 ArrayList
关键类
package itrable.简单ArrayList;
import java.util.Iterator;
// ※※ Iterable后面必须写泛型,否则 for each 报错 ※※
public class MyArrayList2<E> implements Iterable<E>{
private Object[] data ;
private int index = 0;
public MyArrayList2(int len) {
data = new Object[len];
}
public void add(E e){
data[index] = e;
++index;
}
@Override
public Iterator<E> iterator() {
return new It();
}
private class It implements Iterator<E> {
/**
* 初始位置
*/
private int pos = -1;
@Override
public boolean hasNext() {
// 下一个位置,小于数组长度,就认为有下一个
return pos + 1 < data.length;
}
@Override
public E next() {
// 取下一个值
++pos;
E ret = (E)data[pos];
return ret;
}
}
}
测试1
使用 Iterator
遍历
public static void main(String[] args) {
MyArrayList2 list = new MyArrayList2(4);
list.add("李雷");
list.add("韩梅梅");
list.add("lucy");
list.add("lili");
Iterator it = list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
测试2(关键)
支持 for each
循环语句
public static void main2(String[] args) {
MyArrayList2<String> list = new MyArrayList2(4);
list.add("李雷");
list.add("韩梅梅");
list.add("lucy");
list.add("lili");
for(String item : list){
System.out.println(item);
}
}