我是Java的新手,我真的很困惑迭代器和可迭代器。谁能给我解释一下并举几个例子吗?
当前回答
Iterable的实现提供了自身的迭代器:
public interface Iterable<T>
{
Iterator<T> iterator();
}
迭代器是一种简单的方法,允许一些人在没有赋值权限的情况下循环遍历数据集合(尽管有删除的能力)。
public interface Iterator<E>
{
boolean hasNext();
E next();
void remove();
}
看到Javadoc。
其他回答
在java中的每个循环中都引入了Iterable
public interface Collection<E> extends Iterable<E>
Iterator是在Iterable上管理迭代的类。它维护当前迭代中我们所处的状态,并知道下一个元素是什么以及如何获取它。
如果一个集合是可迭代的,那么它可以使用迭代器迭代(因此可以在for每个循环中使用)。迭代器是遍历集合的实际对象。
匿名类可以轻松地将Iterator转换为Iterable,并允许您使用Iterable语法(for loops, forEach())。
例如:考虑一个Iterator<T> it
for (T element : new Iterable<T>() {
@Override
public Iterator<T> iterator() {
return it;
}
}) {
//do something with `T element`
}
抽象在函数中
static <T> Iterable<T> toIterable(Iterator<T> it) {
return new Iterable<T>() {
@Override
public Iterator<T> iterator() {
return it;
}
};
}
使用
for (T element: toIterable(it) {
...
}
假设有10个苹果。 当它实现Iterable时,就像把每个苹果放在从1到10的盒子里,并返回一个可用于导航的迭代器。
通过实现迭代器,我们可以得到任何apple, apple in next boxes等等。
实现iterable提供了一个迭代器来导航它的元素,尽管要导航,迭代器需要被实现。
我知道这是一个老问题了,但是对于任何读到这篇文章的人来说,如果他们被同样的问题所困扰,并且可能被所有的术语所淹没,这里有一个很好的,简单的类比来帮助你理解迭代对象和迭代器之间的区别:
想想公共图书馆。旧的学校。用纸质书。是的,就是那种图书馆。
满满一书架的书就像一个可迭代对象。你可以看到书架上有一长排的书。你可能不知道有多少本书,但你可以看到这是一本很长的书集。
图书管理员就像迭代器一样。他可以在任何时候指出一本书。他可以在他所指向的位置插入/删除/修改/阅读书籍。每次你对着他喊“下一本!”时,他就依次指着每一本书。所以,你通常会问他:“有下一本书吗?”,他会说“有”,你说“下一本书!”,他会指向下一本书。他也知道什么时候他已经到了书架的尽头,所以当你问:“有下一个吗?”他会说“没有”。
我知道这有点傻,但我希望这能有所帮助。
推荐文章
- 如何在Java中打印二叉树图?
- String.format()在Java中格式化双重格式
- com.jcraft.jsch.JSchException: UnknownHostKey
- Java中的操作符重载
- 如何加速gwt编译器?
- 在Hibernate中重新连接分离对象的正确方法是什么?
- 应该……接住环内还是环外?
- 如何格式化Joda-Time DateTime仅为mm/dd/yyyy?
- 如何在POM.xml中引用环境变量?
- 如何在android中复制一个文件?
- 将整数转换为字符串,以逗号表示千
- 接口方法的最终参数-有什么意义?
- Java中的@UniqueConstraint注释
- 如何在清洁模式下运行eclipse ?如果我们这样做会发生什么?
- 获取java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory异常