Java集合:Iterable接口

直入主题:先看下相关接口及JDK给出的解释

Iterable接口:

//实现此接口允许对象成为“ for-each循环”语句的目标
public interface Iterable<T> {
    //return an Iterator.
    Iterator<T> iterator();
    
  	//给每个元素执行给定的操作,直到处理完所有元素或该操作引发异常为止。除非额外实现该方法
    default void forEach(Consumer<? super T> action) {
        Objects.requireNonNull(action);
        for (T t : this) {
            action.accept(t);
        }
    }
    ...
}

消费者:

//函数式接口
@FunctionalInterface
public interface Consumer<T> {
	//对给定的参数执行此操作
    void accept(T t);
    ...
}    

迭代器:

public interface Iterator<E> {
	//return true if the iteration has more elements
    boolean hasNext();
    //Returns the next element in the iteration
    E next();
	...
}

OK!,接口观察完毕,我们参照ArrayList对这三个接口的实现来定义一个我们的接口。
To do!
每个接口主要方法都需要主动实现
Consumer接口是函数接口,可以使用Lamda表达式

public class CollectionTest {
    public static void main(String[] args) {
        new myArray().forEach((t)->{
            System.out.println(t);
        });
        //上面等同于下面
        new myArray().forEach(
                new Consumer() {
                    @Override
                    public void accept(Object o) {
                        System.out.println(o);
                    }
                }

        );
    }
}
class myArray implements Iterable{
    
    private int[] data = {1,2,3,4,5} ;

    int size = data.length;
	//需要自己实现
    @Override
    public Iterator iterator() {
        return new myIterator();
    }
	
	//foreach的内部还是for循环
    @Override
    public void forEach(Consumer action) {
        for (int d : data) {
            action.accept(d);
        }
    }
	//简单的下标检查+数值返回
    private class myIterator implements Iterator{
        int cursor = 0;

        @Override
        public boolean hasNext() {
            return cursor!=size;
        }

        @Override
        public Object next() {
            return (int)data[cursor];
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值