首页 > 资讯 > 彻底搞懂Iterable 和 Iterator

彻底搞懂Iterable 和 Iterator

一、先看结论:

特性/对比项IterableIterator接口定义位置java.lang.Iterablejava.util.Iterator作用表示一个可以被迭代的集合对象实际进行遍历的迭代器对象核心方法Iterator<T> iterator()boolean hasNext()、T next()、void remove()(可选)是否用于 for-each✔ 支持(是 for-each 的基础)✖ 不直接支持 for-each举例List、Set 等集合类实现了它ArrayList.Iterator 是它的实现关系是一个集合类型的契约是一个具体遍历行为的实现

二、概念解析

1. Iterable<T> 接口

public interface Iterable<T> {    Iterator<T> iterator(); }

目的:表示这个对象是“可被遍历”的。

方法含义

iterator():返回一个 Iterator 对象,用来实际进行遍历操作。

常见实现类

ArrayList、HashSet、LinkedList 等集合类都实现了 Iterable 接口。

2. Iterator<T> 接口

public interface Iterator<T> {    boolean hasNext();   // 判断是否还有下一个元素    T next();            // 返回下一个元素    void remove();       // 删除当前元素(可选) } 目的:用于实际执行“遍历操作”的对象。 用法:通过 hasNext() 判断是否还有元素,通过 next() 取出元素。 通常通过 Iterable.iterator() 获取实例

三、形象比喻

Iterable 就像一本书,它能被翻页; Iterator 就是一个人,他负责一页一页地翻; 一本书(Iterable)有方法 iterator() 来“召唤”这个翻页的人(Iterator);

四、代码示例详解

示例 1:最基础的使用方式

import java.util.ArrayList; import java.util.Iterator; import java.util.List; ​ public class IterableIteratorDemo { ​    public static void main(String[] args) { ​        // 创建一个 List,List 实现了 Iterable 接口        List<String> names = new ArrayList<>();        names.add("张三");        names.add("李四");        names.add("王五"); ​        // 方式一:使用 for-each 语法遍历(本质依赖于 Iterable)        for (String name : names) {            System.out.println("for-each 遍历: " + name);       } ​        // 方式二:显式使用 Iterator 遍历        Iterator<String> iterator = names.iterator(); // 获取迭代器对象 ​        while (iterator.hasNext()) { // 判断是否还有元素            String name = iterator.next(); // 获取下一个元素            System.out.println("Iterator 遍历: " + name);       }   } } 输出:

for-each 遍历: 张三 for-each 遍历: 李四 for-each 遍历: 王五 Iterator 遍历: 张三 Iterator 遍历: 李四 Iterator 遍历: 王五

示例 2:自定义类实现 Iterable 接口

import java.util.Iterator; import java.util.NoSuchElementException; ​ // 自定义一个实现 Iterable 接口的类,表示 0 到 n 的整数序列 public class MyRange implements Iterable<Integer> { ​    private int max; ​    public MyRange(int max) {        this.max = max;   } ​    // 实现 iterator() 方法,返回自定义的 Iterator    @Override    public Iterator<Integer> iterator() {        return new Iterator<Integer>() {            private int current = 0; // 当前遍历到的位置 ​            @Override            public boolean hasNext() {                return current <= max; // 如果没到 max,则还有下一个           } ​            @Override            public Integer next() {                if (!hasNext()) {                    throw new NoSuchElementException();               }                return current++; // 返回当前值,并自增           }       };   } ​    // 主方法进行测试    public static void main(String[] args) {        MyRange range = new MyRange(5); ​        for (int i : range) { // 支持 for-each 语法            System.out.print(i + " "); // 输出 0 1 2 3 4 5       }   } }

五、总结

类别说明Iterable一个集合类如果实现了它,就可以使用 for-each 遍历。是一个 “集合的能力” 。Iterator是对集合进行遍历的 “工具” ,包含有 hasNext() 和 next() 等实际操作。常见关系所有实现了 Iterable 的类(如 List、Set)都可以通过 iterator() 获取 Iterator 对象

六、思维点

“for-each 背后发生了什么?”

for-each 背后的实现依赖于 Iterable 接口,它会调用集合的 iterator() 方法返回一个 Iterator 对象,然后循环调用 hasNext() 和 next() 方法进行元素访问。

标签:

话题:

本文收录于以下专栏

java 查缺补漏

专栏目录

better

0 订阅

·

2 篇文章

下一篇

彻底搞懂 Comparable 和 Comparator

相关知识

彻底搞懂Iterable 和 Iterator
一文彻底搞懂深度学习
彻彻底底、明明白白搞懂“生酮饮食”
苹果 AI 下半场:年底问世的新 Siri,要彻底改变 iPhone 的交互
360怎么卸载干净?360彻底卸载攻略:一步不漏,轻松搞定!
减肥事半功倍‖搞懂减肥的底层逻辑‼️
一文彻底搞懂益生菌的作用与功效?能不能长期吃?
运动营养食品到底是啥?一文搞懂
如何在苹果系统彻底删除APP
一文彻 底搞懂益生菌的作用与功效?能不能长期吃?

网址: 彻底搞懂Iterable 和 Iterator https://m.trfsz.com/newsview1806957.html