2013-09-01 5 views
5

나는리스트 반복을 연습하고있다. 내 질문은, 왜이 두 가지 방법이 다른 결과를 낳는가하는 것입니다.왜이 두리스트 반복자는 다르게 동작합니까?

첫 번째 코드는 무한 루프를 인쇄합니다. 두 번째는 인덱스의 다음 String을 출력한다.

저는 자바를 처음 사용합니다. 이것은 제 첫 번째 언어이기도합니다.

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 메서드가 실행될 때마다 새로운 iterator입니까? –

+0

@TinLe 예, 그렇습니다. – hexafraction

0

첫 번째 경우 루프에서 조건을 확인할 때마다 새로운 첫 번째 요소로 시작하는 새로운 Iterator을 만듭니다. 그런 다음 println (루프 당 2 개의 반복자)에서 더 많은 것을 만듭니다. 프로그램은 끝없이 첫 번째 요소 ("yo")를 표시합니다.

관련 문제