说明
为对象使用迭代器 iterator 提供统一调用,也就是说:Iterable 与 Iterator 搭配使用
java 集合的顶级接口 Collection 就实现了 Iterable 接口,也就是说 java 集合类都实现了 Iterable 接口
作用
Iterable与Iterator搭配使用,实现自定义集合返回
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);
}
}