2013-09-01 198 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")。

相關問題