迭代器和迭代器有什么区别,以及如何使用它们?

我是新来的Java,我真的很困惑迭代器和迭代。 任何人都可以解释给我一些例子吗?

Iterable是可以迭代的一系列元素的简单表示。 它没有任何迭代状态,如“当前元素”。 相反,它有一个生成Iterator方法。

Iterator是具有迭代状态的对象。 它可以让你检查使用hasNext()是否有更多的元素,并使用hasNext()移动到下一个元素(如果有的话next()

通常, Iterable应该能够生成任意数量的有效Iterator

Iterable的实现是提供自身的Iterator

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

迭代器是一种简单的方法,允许一些人在没有赋值权限的情况下循环访问数据(尽pipe能够删除)。

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

见Javadoc 。

Iterable:可迭代的类。 也就是说,在我们用完之前,有一个“先让我先做事,再做下一件事,等等”的概念。

迭代器:一个pipe理迭代的迭代的类。 也就是说,它会跟踪我们在当前迭代中的位置,并知道下一个元素是什么以及如何获得它。

为了使一个对象可迭代,它需要发出一个Iterator对象。 为了执行这个合同,将使用Iterable接口。 它包含一个名为iterator()的方法,它返回Iterator。 因此,任何实现Iterable的类都将返回一个Iterator。

 public interface Collection<E> extends Iterable<E> {} 

例如采取任何集合。 Collection是一个接口,表示一系列元素的容器。 像ArrayList,Vector的每个集合都实现Collection和Iterator。

Iterable的一个优点是,当你实现Iterable的时候,那些对象得到for:for each循环语法的支持。

如果一个集合是可迭代的,那么它可以使用一个迭代器进行迭代(因此可以在每个循环中使用)。迭代器是将在集合中迭代的实际对象。

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

 class SomeClass implements Iterable<String> {} class Main { public void method() { SomeClass someClass = new SomeClass(); ..... for(String s : someClass) { //do something } } } 

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

最重要的考虑是所涉及的项目是否应该能够被遍历多次。 这是因为你总是可以通过再次调用iterator()来倒回一个Iterable,但是没有办法倒回一个Iterator。

考虑一个有10个苹果的例子。 当它实现Iterable时,就像将每个苹果放在1到10的方框中,并返回一个可用于导航的迭代器。

通过实现迭代器,我们可以得到任何苹果,苹果在下一个盒子等。

因此,实现迭代给出了一个迭代器来浏览其元素虽然要导航,迭代器需要实现..

问题:Iterable和Iterator之间的区别?
答:

迭代:与forEach循环有关
迭代器:是与Collection相关的

forEach循环的目标元素是可迭代的。
我们可以使用Iterator从Collection中逐一获取对象

java.lang包中的可重用存在
Iterator存在于java.util包中

只包含一个方法iterator()
包含三个方法hasNext(),next(),remove()

在1.5版本中引入
在1.2版本中引入

除了ColinD和Seeker的答案。

简而言之, IterableIterator都是在Java的Collection Framework中提供的接口。

可迭代

一个类必须实现Iterable接口,如果它想有一个for-each循环遍历它的集合。 但是, for-each循环只能用于循环正向的集合,并且不能修改此集合中的元素 。 但是,如果您只想读取元素数据,那么这非常简单,并且感谢Java lambdaexpression式,它通常是一个class轮。 例如:

 iterableElements.forEach (x -> System.out.println(x) ); 

迭代器

这个接口可以让你迭代一个集合,获取和删除它的元素。 每个集合类都提供了一个将迭代器返回到集合起始处的iterator()方法。 这个接口的优点是可以通过这个接口添加,修改或删除集合中的元素 。 但是,访问元素需要比可迭代多一点的代码。 例如:

 for (Iterator i = c.iterator(); i.hasNext(); ) { Element e = i.next(); //Get the element System.out.println(e); //access or modify the element } 

资料来源:

  1. Java Doc Iterable
  2. Java Doc迭代器

基本上讲,他们俩都是非常密切相关的。

考虑迭代器是一个接口,它可以帮助我们在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

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

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

Iterator是pipe理Iterable迭代的类。 它保持了我们在当前迭代中的状态,并知道下一个元素是什么以及如何获得它。