Java手写增强for循环容器

引言

        看到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()方法返回的是该类型对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值