java.lang.Iterable实例的迭代问题
我的代码 两者之间的区别是什么,为什么A不能合法,而B在工作java.lang.Iterable实例的迭代问题,java,iterator,Java,Iterator,我的代码 两者之间的区别是什么,为什么A不能合法,而B在工作 Can only iterate over an array or an instance of java.lang.Iterable 想知道为什么底层代码不起作用吗?for循环中是否发生了一些不同的事情而和的都提供了要迭代的相同迭代器状态。放弃迭代器调用: for (Test t : ob.iterator()) { ----------------------A System.out.println
Can only iterate over an array or an instance of java.lang.Iterable
想知道为什么底层代码不起作用吗?for循环中是否发生了一些不同的事情
而
和的都提供了要迭代的相同迭代器状态。放弃迭代器调用:
for (Test t : ob.iterator()) { ----------------------A
System.out.println();
}
while (ob.iterator().hasNext()) { -------------------------- B
System.out.println();
}
必须为for循环指定一个Iterable(或数组),而不是迭代器
这: 几乎可以肯定,这不符合你的意思。每次计算循环保护时,这将在迭代开始时创建一个新的迭代器,并检查是否存在“下一个”元素。除非
ob
最初为空,否则在每次迭代中都将继续为空(除非从循环中的ob
中删除元素)
(可能)正确的方法是:
while (ob.iterator().hasNext()) {
Iterator Iterator=ob.Iterator();
而(iterator.hasNext()){//在整个迭代过程中使用相同的迭代器实例。
T next=iterator.next();
}
ob in for loop,它的适用性如何?只是因为它实现了可移植的接口。你是怎么回来的?在while中,它被显式调用。@Mariaob
是iterable,因为它是Test
类型的变量,一个实现iterable
的类。增强的for循环是语法糖,它被转换为for循环:编译器插入iterator()
调用。看,这是做同样事情的不同方式吗?我错了吗?这回答了你的问题吗?还是这个
for (Test t : ob) {
while (ob.iterator().hasNext()) {
Iterator<T> iterator = ob.iterator();
while (iterator.hasNext()) { // use the same iterator instance throughout iteration.
T next = iterator.next();
}