2013-09-01 3 views
5

Sto praticando l'iterazione dell'elenco quindi mi sono bloccato. La mia domanda è, perché questi due metodi danno risultati diversi.Perché questi due elenchi Iterator si comportano diversamente?

Il primo codice stampa un ciclo infinito. Mentre il secondo, stampa la stringa successiva nell'indice.

Sono nuovo di java, questa è anche la mia prima lingua.

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()); 
    } 
} 

risposta

6

l1.iterator(sempre genera un nuovo iteratore . Nel primo pezzo di codice stai creando un nuovo iteratore, scartandolo, ricreando e scartando di nuovo. Dal momento che l'iteratore non ha la possibilità di raggiungere la fine, non uscirai mai dal ciclo.

+1

Quindi in pratica .iterator è un nuovo iteratore ogni volta che viene eseguito il metodo while? –

+0

@TinLe Sì, lo è. – hexafraction

0

Nel primo caso si crea un nuovo Iterator (che inizia con il primo elemento ancora e ancora) ogni volta che si verifica la condizione nel ciclo. E poi ne crei di più nel println (2 iteratori creati per loop). Il programma visualizza il primo elemento ("yo") all'infinito.