我是Java的新手,我真的很困惑迭代器和可迭代器。谁能给我解释一下并举几个例子吗?
当前回答
在java中的每个循环中都引入了Iterable
public interface Collection<E> extends Iterable<E>
Iterator是在Iterable上管理迭代的类。它维护当前迭代中我们所处的状态,并知道下一个元素是什么以及如何获取它。
其他回答
最重要的考虑是所讨论的项是否应该能够多次遍历。这是因为你总是可以通过再次调用iterator()来倒带一个Iterable,但是没有办法倒带一个iterator。
如果一个集合是可迭代的,那么它可以使用迭代器迭代(因此可以在for每个循环中使用)。迭代器是遍历集合的实际对象。
Iterable是一系列可以迭代的元素的简单表示。它没有任何迭代状态,例如“当前元素”。相反,它只有一个产生Iterator的方法。
迭代器是具有迭代状态的对象。它允许您使用hasNext()检查是否有更多元素,并使用next()移动到下一个元素(如果有)。
通常,Iterable应该能够产生任意数量的有效迭代器。
匿名类可以轻松地将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) {
...
}
Iterable的实现提供了自身的迭代器:
public interface Iterable<T>
{
Iterator<T> iterator();
}
迭代器是一种简单的方法,允许一些人在没有赋值权限的情况下循环遍历数据集合(尽管有删除的能力)。
public interface Iterator<E>
{
boolean hasNext();
E next();
void remove();
}
看到Javadoc。
推荐文章
- 在流中使用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