迭代器接口 SCJP [重复]
Posted
技术标签:
【中文标题】迭代器接口 SCJP [重复]【英文标题】:Iterator interface SCJP [duplicate] 【发布时间】:2014-04-18 21:35:06 【问题描述】:import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class TryMe
public static void main(String args[])
List list = new LinkedList<String>();
list.add("one");
list.add("two");
list.add("three");
Collections.reverse(list);
Iterator iter = list.iterator();
for (Object o : iter)
System.out.print(o + " ");
这个问题来自 SCJP,我在理解迭代器和可迭代方面有问题。
我知道迭代器是迭代器方法的接口。为什么我们不能在迭代器的情况下为每个循环使用?编译器说:只能迭代一个数组或者java.lang.iterable的一个实例。这是什么?我尝试了很多搜索但没有得到答案
请回复
【问题讨论】:
因为Iterator
不是 Iterable
。这是两个不同的界面。
你在迭代器上迭代而不是在迭代器上
相关:***.com/questions/6863182/…
@RC。不相关,可能是重复
顺便说一句,编译器很清楚你的问题:只能迭代 array 或 java.lang.Iterable
的实例>,所以你不能遍历Iterator
【参考方案1】:
List
是 Iterable
,Iterator
不是。
这将起作用:
for (Object o : list)
【讨论】:
【参考方案2】:Iterable
和 Iterator
之间存在差异。 Iterator
是一个迭代 另一个 对象的元素的对象,Iterable
。 Iterable
包含元素并提供迭代Iterable
元素的Iterator
对象(使用iterator()
方法)。
增强的for
循环必须采用Iterable
,以便它可以调用iterator()
以获得保证的新Iterator
以隐式迭代元素。
这是由JLS, Section 14.14.2 强制执行的:
增强的 for 语句具有以下形式:
EnhancedForStatement: for ( FormalParameter : Expression ) Statement
和
表达式的类型必须是
Iterable
或数组类型(§10.1),否则会出现编译时错误。
【讨论】:
以上是关于迭代器接口 SCJP [重复]的主要内容,如果未能解决你的问题,请参考以下文章