Iterator
인터페이스를 정의하고, Collection
인터페이스에는 Iterator
를 반환하는 iterator()
를 정의하고 있습니다.iterator()
는 Collection
인터페이스에 정의된 메서드이므로 List
나 Set
에 알맞게 작성되어 있습니다.iterator()
를 호출하여 Iterator
를 얻은 다음 반복문(주로 while문)을 사용하여 컬렉션 클래스의 요소들을 읽어 올 수 있습니다.true
, 없으면 false
를 반환합니다.next()
를 호출하기 전에 hasNext()
를 호출해서 읽어 올 요소가 있는지 확인하는 것이 안전합니다.Iterator
의 마지막 반환 요소를 삭제합니다.next()
를 호출한 이후에만 사용할 수 있습니다. (선택 사항)import java.util.ArrayList; import java.util.Iterator; import java.util.List; class Main { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); Iterator iterator = list.iterator(); while (iterator.hasNext()) { Object obj = iterator.next(); System.out.println(obj); } } } // 실행 결과 1 2 3 4 5
Map
인터페이스를 구현한 컬렉션 클래스는 키(key) 와 값(value)을 쌍(pair)으로 저장하기 때문에 iterator()
를 직접 호출할 수 없습니다.Map
에서는 keySet()
이나 entrySet()
과 같은 메서드를 통해서 키와 값을 따로 Set 형태로 얻은 후 다시 iterator()
를 호출해야 합니다.Set
클래스들은 각 요소간의 순서가 유지 되지 않기 때문에 Iterator
를 이용해서 요소를 읽어올 때 저장 순서와 같지 않습니다.import java.util.HashMap; import java.util.Iterator; import java.util.Map; class Main { public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("apple", 1); map.put("banana", 2); map.put("orange", 3); Iterator<String> keyIt = map.keySet().iterator(); while (keyIt.hasNext()) { Object key = keyIt.next(); System.out.println(key); } // 실행결과 // banana // orange // apple Iterator<Map.Entry<String, Integer>> valueIt = map.entrySet().iterator(); while (valueIt.hasNext()) { Map.Entry<String, Integer> entry = valueIt.next(); System.out.println(entry); } // 실행결과 // banana=2 // orange=3 // apple=1 } }