我是Java的新手,我真的很困惑迭代器和可迭代器。谁能给我解释一下并举几个例子吗?
当前回答
我知道这是一个老问题了,但是对于任何读到这篇文章的人来说,如果他们被同样的问题所困扰,并且可能被所有的术语所淹没,这里有一个很好的,简单的类比来帮助你理解迭代对象和迭代器之间的区别:
想想公共图书馆。旧的学校。用纸质书。是的,就是那种图书馆。
满满一书架的书就像一个可迭代对象。你可以看到书架上有一长排的书。你可能不知道有多少本书,但你可以看到这是一本很长的书集。
图书管理员就像迭代器一样。他可以在任何时候指出一本书。他可以在他所指向的位置插入/删除/修改/阅读书籍。每次你对着他喊“下一本!”时,他就依次指着每一本书。所以,你通常会问他:“有下一本书吗?”,他会说“有”,你说“下一本书!”,他会指向下一本书。他也知道什么时候他已经到了书架的尽头,所以当你问:“有下一个吗?”他会说“没有”。
我知道这有点傻,但我希望这能有所帮助。
其他回答
我知道这是一个老问题了,但是对于任何读到这篇文章的人来说,如果他们被同样的问题所困扰,并且可能被所有的术语所淹没,这里有一个很好的,简单的类比来帮助你理解迭代对象和迭代器之间的区别:
想想公共图书馆。旧的学校。用纸质书。是的,就是那种图书馆。
满满一书架的书就像一个可迭代对象。你可以看到书架上有一长排的书。你可能不知道有多少本书,但你可以看到这是一本很长的书集。
图书管理员就像迭代器一样。他可以在任何时候指出一本书。他可以在他所指向的位置插入/删除/修改/阅读书籍。每次你对着他喊“下一本!”时,他就依次指着每一本书。所以,你通常会问他:“有下一本书吗?”,他会说“有”,你说“下一本书!”,他会指向下一本书。他也知道什么时候他已经到了书架的尽头,所以当你问:“有下一个吗?”他会说“没有”。
我知道这有点傻,但我希望这能有所帮助。
基本上来说,这两者都是密切相关的。
将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上管理迭代的类。它维护当前迭代中我们所处的状态,并知道下一个元素是什么以及如何获取它。
在java中的每个循环中都引入了Iterable
public interface Collection<E> extends Iterable<E>
Iterator是在Iterable上管理迭代的类。它维护当前迭代中我们所处的状态,并知道下一个元素是什么以及如何获取它。
如果一个集合是可迭代的,那么它可以使用迭代器迭代(因此可以在for每个循环中使用)。迭代器是遍历集合的实际对象。
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 如何配置slf4j-simple
- 在Jar文件中运行类
- 带参数的可运行?
- 在Python中获取迭代器中的元素个数
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作
- 在Java流是peek真的只是调试?
- Recyclerview不调用onCreateViewHolder