JAVA Iterable接口

说明

为对象使用迭代器 iterator 提供统一调用,也就是说:IterableIterator 搭配使用

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);
    }
}

原文出处:https://malaoshi.top/show_1IX4sZFw1Nqh.html