【问题标题】:Iterator interface SCJP [duplicate]迭代器接口 SCJP [重复]
【发布时间】: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。这是两个不同的界面。
  • 你在迭代器上迭代而不是在迭代器上
  • @RC。不相关,可能是重复
  • 顺便说一句,编译器很清楚你的问题:只能迭代 array 或 java.lang.Iterable的实例>,所以你不能遍历Iterator

标签: java scjp


【解决方案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),否则会出现编译时错误。

    【讨论】:

      猜你喜欢
      • 2013-02-28
      • 2014-03-31
      • 1970-01-01
      • 2010-11-25
      • 2012-11-07
      • 2014-08-13
      • 2012-07-06
      • 1970-01-01
      • 2012-10-17
      相关资源
      最近更新 更多