JAVA Iterable接口 作者:马育民 • 2023-01-31 13:07 • 阅读:10090 # 说明 为对象使用迭代器 `iterator` 提供统一调用,也就是说:`Iterable` 与 `Iterator` 搭配使用 java 集合的顶级接口 `Collection` 就实现了 `Iterable` 接口,也就是说 java 集合类都实现了 `Iterable` 接口 ### 作用 - 返回 `Iterator` 对象 - 支持 `for each` 循环 ### 源码 ``` package java.lang; public interface Iterable { // 返回一个内部元素为T类型的迭代器 Iterator iterator(); } ``` # 例子 实现简单的 ArrayList ### 关键类 ``` package itrable.简单ArrayList; import java.util.Iterator; // ※※ Iterable后面必须写泛型,否则 for each 报错 ※※ public class MyArrayList2 implements Iterable{ 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 iterator() { return new It(); } private class It implements Iterator { /** * 初始位置 */ 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 list = new MyArrayList2(4); list.add("李雷"); list.add("韩梅梅"); list.add("lucy"); list.add("lili"); for(String item : list){ System.out.println(item); } } ``` 原文出处:http://malaoshi.top/show_1IX4sZFw1Nqh.html