引言
看到ArrayList容器可以用增强for循环,于是寻思自己写一个支持增强for循环的容器
正文
其实只需要给自己的容器实现Iterable接口即可,该接口需要返回一个迭代器Iterator对象,主要实现其中的两个方法:
① hasNext():当前元素是否有下一项
② next():返回下一个元素
自己简单实现的一个MyArrayList,代码如下:
import java.util.Iterator;
public class MyArrayList<T> implements Iterable<T>{
// 存放元素的数组
private T[] elements;
// 当前位置元素的下标,-1代表当前下标在第一个元素前面
private int iteratorIndex = -1;
// 接收一个数组初始化容器
public MyArrayList(T[] elements) {
this.elements = elements;
}
// 返回当前容器的迭代器
@Override
public Iterator<T> iterator() {
return new Iterator<T>() {
@Override
public boolean hasNext() {
// 判断是否有下一项元素
if (iteratorIndex + 1 < elements.length) {
return true;
}
// 没有下一项元素了,下次迭代从头开始
iteratorIndex = -1;
return false;
}
@Override
public T next() {
// 返回下一项元素
return elements[++iteratorIndex];
}
};
}
}
测试代码如下:
public class Main {
public static void main(String[] args) {
MyArrayList<Integer> myArrayList = new MyArrayList<>(new Integer[]{1, 2, 3});
for (Integer val : myArrayList) {
System.out.println(val);
}
}
}
测试结果:
1
2
3
进程已结束,退出代码为 0
注意
实现的是Iterable接口,不是java.util.Iterator,之所以导入java.util.Iterator,是因为next()方法返回的是该类型对象