2013-09-01 110 views
5

我正在练习列表迭代,然后我卡住了。我的问题是,为什么这两种方法会产生不同的结果。为什么这两个列表迭代器的行为不同?

第一个代码打印出一个无限循环。而第二个则打印出索引中的下一个字符串。

我是新来的java,这也是我的第一语言。

public static void main(String[] args) { 


    String[] hi = {"yo", "wat", "sup"}; 
    List<String> l1 = new ArrayList(Arrays.asList(hi)); 

    while (l1.iterator().hasNext()) { 


     System.out.println(l1.iterator().next()); 
     ; 
    } 
    } 

VS

public static void main(String[] args) { 


    String[] hi = {"yo", "wat", "sup"}; 
    List<String> l1 = new ArrayList(Arrays.asList(hi)); 

    Iterator<String> rator = l1.iterator(); 

    while (rator.hasNext()) { 
     System.out.println(rator.next()); 
    } 
} 

回答

6

l1.iterator(总是生成迭代器。在第一部分代码中,您将创建一个新的迭代器,放弃它,重新创建它,并再次丢弃它。由于迭代器没有机会达到最终结果,因此永远不会退出循环。

+1

那么基本上.iterator每次执行while方法都是一个新的迭代器? –

+0

@TinLe是的,它是。 – hexafraction

0

在第一种情况下,每次检查循环中的条件时,都会创建一个新的Iterator(从第一个元素开始一次又一次)。然后在println(每个循环创建2个迭代器)中创建更多。程序无限地显示第一个元素("yo")。

相关问题