List<E> 반복자 Iterator

gustjtmd·2022년 1월 10일
0

Java

목록 보기
20/40
저장된 인스턴스의 순차적 접근 방법 1 : for - each문의 사용
List<String> list = new LinkedList<>(); 
            
            //인스턴스 저장
            list.add("Toy");
            list.add("Box");
            list.add("Robot");
            
            //전체 인스턴스 참조
            for(String s : list)
                System.out.print(s +"\t");
                System.out.println();
            
            list.remove(0); //첫번째 인스턴스 삭제
            
            //전체 인스턴스 참조
            for(String s : list)
                System.out.print(s +"\t");

저장된 인스턴스의 순차적 접근 방법 2 : 반복자 Iterator 활용
public interface Collection<E> extends Iterable<E>

Collection<E>는 인터페이스 Iterable<E>를 상속하고 있다. 
따라서 Collection<E>를 상속하는 클래스는 Iterable<E>를 추상 메소드를 모두 구현한다.
Iterable<E>의 인터페이스에는 Iterator<T> iterator()의 추상 메소드가 존재.
Interable<T>의 내부
public interface Iterable<T> {
    /**
     * Returns an iterator over elements of type {@code T}.
     *
     * @return an Iterator.
     */
    Iterator<T> iterator();
}
Iterator<E>의 메소드
E next()	    다음 인스턴스의 참조 값을 반환
boolean hasNext()   next 메소드 호출시 참조값 반환 가능 여부 확인.
void remove()       next 메소드 호출을 통해 반환했던 인스턴스 삭제.
이러한 반복자는 생성과 동시에 첫 번째 인스턴스를 가리키고 next가 호출될 때마다 가리키는 대상이 다음 인스턴스로 옮겨진다. 그렇다면 반복자를 원하는 때에 다시 첫번째 인스턴스를 가리키게 하려면 반복자를 다시 얻어줘야 한다.
Iterator<String> itr = list.iterator();
예제.
List<String> list = new LinkedList<>();
        list.add("Toy");
        list.add("Box");
        list.add("Robot");
        list.add("Box");

        Iterator<String> itr = list.iterator(); //반복자 처음 획득

        // 반복자를 이용한 순차적 참조
        while(itr.hasNext()){
            System.out.println(itr.next()+'\t');
        }

        itr = list.iterator();  //반복자 다시 획득

        String str;
        while(itr.hasNext()){
            str = itr.next();
            if(str.equals("box"))
            itr.remove();
        }

        itr = list.iterator();  //반복자 다시 획득

        //삭제후 결과 확인
        while(itr.hasNext()){
            System.out.println(itr.next()+'\t');
        }
        
결과
Toy	Box	Robot	Box	
Toy	Robot	
        
profile
반갑습니다

0개의 댓글