我是Java的新手,我真的很困惑迭代器和可迭代器。谁能给我解释一下并举几个例子吗?


当前回答

Iterable的实现提供了自身的迭代器:

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

迭代器是一种简单的方法,允许一些人在没有赋值权限的情况下循环遍历数据集合(尽管有删除的能力)。

public interface Iterator<E>
{
    boolean hasNext();
    E next();
    void remove();
}

看到Javadoc。

其他回答

实现Iterable接口允许一个对象作为foreach语句的目标。

class SomeClass implements Iterable<String> {}

class Main 
{
  public void method()
  {
     SomeClass someClass = new SomeClass();
     .....

    for(String s : someClass) {
     //do something
    }
  }
}

Iterator是一个接口,它具有迭代元素的实现。Iterable是一个提供迭代器的接口。

Iterable的实现提供了自身的迭代器:

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

迭代器是一种简单的方法,允许一些人在没有赋值权限的情况下循环遍历数据集合(尽管有删除的能力)。

public interface Iterator<E>
{
    boolean hasNext();
    E next();
    void remove();
}

看到Javadoc。

假设有10个苹果。 当它实现Iterable时,就像把每个苹果放在从1到10的盒子里,并返回一个可用于导航的迭代器。

通过实现迭代器,我们可以得到任何apple, apple in next boxes等等。

实现iterable提供了一个迭代器来导航它的元素,尽管要导航,迭代器需要被实现。

基本上来说,这两者都是密切相关的。

将Iterator视为一个接口,它帮助我们在一些未定义的方法(如hasNext(), next()和remove()的帮助下遍历集合。

另一方面,Iterable是另一个接口,如果由类实现,则强制该类为Iterable,并且是for - each构造的目标。 它只有一个名为iterator()的方法,该方法来自iterator接口本身。

当一个集合是可迭代的,那么它可以使用迭代器迭代。

为了了解,请访问以下内容:

ITERABLE: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/Iterable.java

迭代器http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Iterator.java

正如这里所解释的,“Iterable”被引入是为了能够在foreach循环中使用。实现Iterable接口的类可以被迭代。

Iterator是在Iterable上管理迭代的类。它维护当前迭代中我们所处的状态,并知道下一个元素是什么以及如何获取它。