有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用Iterable和迭代器接口

我对Java还是个新手,今天我试图理解迭代器的用法
所以我有几个问题:

  1. 为什么我需要实现Iterable呢?它只提供了一个为集合创建新迭代器的方法,但如果我想获得所有元素,我也可以使用普通的或增强的for循环。 我已经读过这个问题:What is the Iterable interface used for?以及更多,但他们只是说,它允许您迭代所有元素,这又回到了我的问题

  2. 如果我实现Iterable,我也应该实现迭代器吗
    因为这一个实际上提供了一些可以用来覆盖的方法
    例如,如果我的类有一个布尔值,无论我是否希望我的对象在循环中,我都可以编写

    public boolean hasNext() {
    if(loop)
        return true;
       //other things
    }
    
  3. 如果我真的像2.中说的那样。,增强for循环会使用这些覆盖方法吗
    例如,上面提到的循环属性:如果为真,For循环是否会在内部运行

我希望有人能帮助我更好地理解这个概念


共 (1) 个答案

  1. # 1 楼答案

    如果定义一个集合,那么就是实现一个Iterable。例如,如果您想创建一个自定义列表,通常会使其子类AbstractList,它本身扩展了AbstractCollection,实现了Collection,实现了Iterable。所以你的名单将是“事实上”的Iterable

    但是如果你是AbstractList的子类,你就不必自己实现迭代器,因为这个方法已经在那里实现了。也就是说,您可能需要提供一个专门的迭代器来满足您的需求

    当您实现Iterable(如果您真的想)时,您将返回一个Iterator。集合本身不应实现Iterator,只应实现返回的迭代器。查看AbstractList源代码,以获取一个示例,了解它是如何完成的

    当您使用增强的for循环时,您使用的是Iterable。增强的for循环只是iterator()返回的迭代器上循环的语法糖。这意味着编译器会将代码转换为使用迭代器。这就是为什么要在增强的for循环中使用集合,必须实现Iterable