字节面试官问:Iterator和erable有什么区别?

本文介绍了Java中Iterator和Iterable的区别。Iterator是迭代器类,用于遍历集合元素,而Iterable是一个接口,用于约束类是否可迭代。实现Iterable接口的类可以使用foreach进行迭代。文章详细解释了两个接口的主要方法和它们在遍历方式上的差异。
摘要由CSDN通过智能技术生成

1.前言

在面试的时候,如果面试官问你:Iterator 和 Iterable 有什么区别,你会怎么回答这个问题呢?要是一年前的我来回答这个问题的话,估计我直接就如鲠在喉、哑口无言了,不过现在的我还是能跟面试官聊上几句的,那么今天就和各位小伙伴分享一下我对 Iterator 和 Iterable 的理解。

2.Iterator 和 Iterable

定义

在聊 Iterator 和 Iterable 之前,我们得先明白二者的定义,俗话说“繁琐问题必有猥琐解法”,我们用一个“猥琐”的方式来理解二者的含义

Iterable:英语好的小伙伴应该都知道,以 able 结尾的单词,表示的含义都是【可以…】或【支持…】,那么 Iterable 所代表的含义也就是可迭代的、支持迭代的,因此我们可以知道,实现了 Iterable 接口的对象是支持迭代,是可迭代的。

Iterator:在英语中以 or 结尾的单词表示的含义是【 …样的人】或【 …者】,就像 creator 表示的是创作者的意思。那么这里也是一样的,iterator 就是迭代者,我们一般叫迭代器,它就是提供迭代机制的对象,具体如何迭代,都是 Iterator 接口来规范的。

P.S. 在 Java 设计模式中也有一种模式叫迭代器模式,Iterator 就是迭代器模式的一个应用例子

Iterable源码及方法

Iterable 源码

public interface Iterable<T> {
    /**
     * Returns an iterator over elements of type {@code T}.
     *
     * @return an Iterator.
     */
    Iterator<T> iterator();


    /**
     * Performs the given action for each element of the {@code Iterable}
     * until all elements have been processed or the action throws an
     * exception.  Unless otherwise specified by the implementing class,
     * actions are performed in the order of iteration (if an iteration order
     * is specified).  Exceptions thrown by the action are relayed to the
     * caller.
     *
     * @implSpec
     * <p>The default implementation behaves as if:
     * <pre>{@code
     *     for (T t : this)
     *         action.accept(t);
     * }</pre>
     *
     * @param action The action 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值