ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 학원 DAY 22. Iterator<E> 인터페이스
    기록 2022. 10. 6. 00:26
    package day23.collection.Iterator;
    
    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.Set;
    
    public class SetApp1 {
    
    	public static void main(String[] args) {
    		/*
    		 * Iterator<E>
    		 * 		- 인터페이스다.
    		 * 		- 콜렉션에 대한 반복작업을 수행하는 객체들이 구현할 기능이 정의되어 있다.
    		 * 		- 향상된 for문이 제공되기 전까지 콜렉션에 저장된 객체들을 반복처리할 때 Iterator<E>구현객체를 사용했다.
    		 * 		- 주요 메소드
    		 * 			boolean hasNext()
    		 * 				- 반복처리할 객체가 남아있으면 true를 반환한다.
    		 * 		 E 		next()
    		 * 				- 객체를 꺼낸다.
    		 * 		 void	remove()
    		 * 				- 이번 반복작업에서 다루고 객체를 삭제한다.
    		 * 
    		 * 		- Iterator<E> 인터페이스의 구현객체를 획득하는 방법
    		 * 			Collection<E> 인터페이스를 구현한 모든 자료구조 구현객체는 Iterator<E> 구현객체를 제공하는 메소드가 있다.
    		 * 			모든 자료구조 구현 클래스는 Iterator<E>를 반환하는 iterator()메소드를 구현하고 있다.
    		 * 
    		 */
    		
    		Set<String> names = new HashSet<>();
    		names.add("김유신");
    		names.add("강감찬");
    		names.add("이순신");
    		names.add("류관순");
    		names.add("윤봉길");
    		
    		System.out.println("### 향상된 for문을 사용해서 콜렉션 객체에 저장된 객체들을 반복처리하기");
    		// 향상된 for문을 사용해서 반복작업 수행하기
    		for (String name : names) {
    			System.out.println(name);
    			
    //			향상된 for문 내부에서는 콜렉션에 저장된 객체를 절대로 삭제할 수 없다.
    //			if (name.equals("김유신")) {
    //				names.remove("김유신");
    //			}
    		}
    		
    		System.out.println("### Iterator를 사용해서 콜렉션 객체에 저장된 객체들을 반복처리하기");
    		// Iterator<E> 객체를 획득해서 반복작업 수행하기
    		Iterator<String> itr = names.iterator();
    		while (itr.hasNext()) {
    			String name = itr.next();
    			System.out.println(name);
    // 콜렉션의 객체들을 반복처리하면서 특정 객체를 삭제할 수 있다.			
    			if (name.equals("김유신")) {
    				itr.remove();
    			}
    		}
    		
    		System.out.println(names);
    
    	}
    
    }

     

     

    •  Iterator<E>
      - 인터페이스다.
      - 콜렉션에 대한 반복작업을 수행하는 객체들이 구현할 기능이 정의되어 있다.
      - 향상된 for문이 제공되기 전까지 콜렉션에 저장된 객체들을 반복처리할 때 Iterator<E>구현객체를 사용했다.
        
      - Iterator<E> 인터페이스의 구현객체를 획득하는 방법
       Collection<E> 인터페이스를 구현한 모든 자료구조 구현객체는 Iterator<E> 구현객체를 제공하는 메소드가 있다.
       *  모든 자료구조 구현 클래스는 Iterator<E>를 반환하는 iterator()메소드를 구현하고 있다.

     

    • 주요 메소드
      • boolean hasNext()

                   반복할 요소가 남아있으면 true를 반환한다.

      • E next()

                    현재 반복대상이 되는 요소를 꺼낸다.

      • void remove()

                      현재 반복대상이 되는 요소를 삭제한다

      •  
    • 사용예제  

    ArrayList<String> list = new ArrayList<>();

    list.add("김유신"); list.add("강감찬"); list.add("류관순");

     

    // 향상된 for문으로 ArrayList에 저장된 요소를 반복해서 조회하기

    for (String name : names) {

      System.out.println(name); }

     

    // Iterator의 구현객체를 이용해서 ArrayList에 저장된 요소를 반복해서 조회하기

    Iterator<String> it = list.iterator();

    while (it.hasNext()) { String name = it.next();

    System.out.println(name); } 

     

    결론

    - Collection를 구현한 자료구조 구현클래스들은 자신의 자료구조에 저장된 각 요소를 순회하는 자신만의 Iterator구현객체를 제공한다.

    - 각 자료구조 구현클래스들의 Iterator 구현내용은 다를 수 있지만, 사용방법은 동일한 구현Iterator객체를 제공한다.

    - 자료구조객체에 저장된 데이터를 순회하면서 현재 반복대상이 되는 객체를 삭제해야하는 경우에는 반드시 Iterator를 사용해야 한다.

    - 향상된 for문의 내부에서는 자료구조객체에 저장된 객체를 삭제할 수 없다.

    댓글

Designed by Tistory.