언어(Language)/Java

[Java] 자바 Iterator 개념 정리 및 활용

잇트루 2022. 9. 22. 00:00
반응형

Iterator

이터레이터(Iterator)는 컬렉션에 저장된 요소들을 순차적으로 읽어오기 위해 사용한다.

Iterator의 기능은 Iterator 인터페이스에 정의되어 있으며, Collection 인터페이스에는 Iterator 인터페이스를 구현한 클래스의 인스턴스를 반환하는 메서드 iterator()가 정의되어 있다.

 

즉, iterator() 메서드를 호출하면, Iterator 타입의 인스턴스가 반환된다.

따라서 Collection 인터페이스를 상속받는 List와 Set 인터페이스를 구현한 클래스들은 iterator() 메서드를 사용할 수 있다.

 

Iterator() 메서드

iterator() 메서드를 통해 만들어진 Iterator 인스턴스는 hasNext(), next(), remove() 등의 메서드를 사용할 수 있다.

hasNext()

읽어올 객체가 남아 있으면 true를 리턴하고, 없으면 false를 리턴한다.

 

next()

컬렉션에서 하나의 객체를 읽어온다. next()를 호출하기 전에 hasNext()를 통해 읽어올 다음 요소가 있는지 먼저 확인하는 것이 좋다.

 

remove()

next()를 통해 읽어온 객체를 삭제한다. next()를 호출한 다음에 remove()를 사용해야 한다.

 

List에서 iterator()를 활용하여 String 객체들을 반복해서 하나씩 가져오는 예제이다.

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class IteratorEx {
    public static void main(String[] args) {
        // ArrayList 생성
        List<String> list = new ArrayList<String>();

        // String 타입의 데이터를 ArrayList에 추가
        list.add("Hello");
        list.add("Java");
        list.add("List");

        // Iterator 인스턴스 생성
        Iterator<String> iterator = list.iterator();

        // 읽어올 다음 객체가 있으면 true
        while (iterator.hasNext()) {
            String str = iterator.next();
            System.out.println(str);
		}
	}
}

 

특정 내용의 객체를 제거 후 출력하는 예제

만약, next() 메서드로 가져온 객체를 컬렉션에서 제거하고 싶다면 remove() 메서드를 호출하면 된다.

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class IteratorEx {
    public static void main(String[] args) {
        // ArrayList 생성
        List<String> list = new ArrayList<String>();

        // String 타입의 데이터를 ArrayList에 추가
        list.add("Hello");
        list.add("Java");
        list.add("List");
        list.add("Hello");
        list.add("Java");

        // Iterator 인스턴스 생성
        Iterator<String> iterator = list.iterator();

        // 읽어올 다음 객체가 있으면 true
        while (iterator.hasNext()) {
            String str = iterator.next();
            if(str.equals("Hello")) {
                iterator.remove();
                continue;
            }
            System.out.println(str);
        }
    }
}
반응형