迭代器接口 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。不相关,可能是重复 顺便说一句,编译器很清楚你的问题:只能迭代 arrayjava.lang.Iterable的实例>,所以你不能遍历Iterator 【参考方案1】:

ListIterableIterator 不是。

这将起作用:

    for (Object o : list) 

【讨论】:

【参考方案2】:

IterableIterator 之间存在差异。 Iterator 是一个迭代 另一个 对象的元素的对象,IterableIterable 包含元素并提供迭代Iterable 元素的Iterator 对象(使用iterator() 方法)。

增强的for 循环必须采用Iterable,以便它可以调用iterator() 以获得保证的新Iterator 以隐式迭代元素。

这是由JLS, Section 14.14.2 强制执行的:

增强的 for 语句具有以下形式:

EnhancedForStatement:
    for ( FormalParameter : Expression ) Statement

表达式的类型必须是Iterable或数组类型(§10.1),否则会出现编译时错误。

【讨论】:

以上是关于迭代器接口 SCJP [重复]的主要内容,如果未能解决你的问题,请参考以下文章

初识java集合——迭代器

迭代器

迭代器,生成器

迭代器生成器与递归调用

迭代器接口

迭代器