Java Iterator를 쓰면 무한루프에 빠집니다.

조회수 3539회

이런식으로 하면 무한으로 출력이 되는데 이건 왜 그렇가요? Iterator iter = set1.iterator(); 의 정확한 용도가 무엇인지 이해가 안 가네요.

import java.util.*;
public class Generic1 {
    public static void main(String[] args){

        Set<String> set1 = new HashSet<>();
        boolean yesorno = set1.add("dada");
        set1.add("dsafd");
        set1.add("dfdsa");
        set1.add("dfds");

        System.out.println(yesorno);
        System.out.println(set1.size());





        while(set1.iterator().hasNext()){
            String str = set1.iterator().next();
            System.out.println(str);
        }



    }
}

tryhelloworld의 http://tryhelloworld.co.kr/questions/1038 질문에 답하려다가 공유하면 좋을것 같아 여기에 옮깁니다.

1 답변

  • set1.iterator()하면 매번 새로운 iterator가 생깁니다. 아래 코드에서 iter1 == iter2하는 부분의 출력문은 실행이 되지 않는데요. iter1과 iter2가 서로 새로 생성된 이터레이터이기 때문입니다. 그래서 hasNext를 쓰시려면 매번 set1.iterator()해서 얻어온 이터레이터를 쓰시면 안되고 아래와 같이 하나를 만들어서 그걸 계속 쓰셔야 합니다.

    import java.util.*;
    
    class CodeRunner{
        public static void main(String[] args){
    
            Set<String> set1 = new HashSet<>();
            set1.add("dada");
            set1.add("dsafd");
            set1.add("dfds");
    
            Iterator<String> iter1 = set1.iterator();
            Iterator<String> iter2 = set1.iterator();
            if(iter1==iter2){
                System.out.println("SameIterator");
            }
    
            while(iter1.hasNext()){
                String str = iter1.next();
                System.out.println(str);
            }
    
            // while(set1.iterator().hasNext()){//set1.iterator()는 새 iterator니까 항상 true입니다.
            //     String str = set1.iterator().next();
            //     System.out.println(str);
            // }
        }
    }
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)