Iterator: 컬렉션에 저장된 데이터에 접근하는데 사용하는 인터페이스
Colletion 인터페이스를 상속하는 List, Set 그리고 상속하지 않는 Map인터페이스들은 각각 데이터를 가져오는 방식이 다 다르다. Iterator는 그 방식을 표준화시킨다.
Collection 인터페이스에는 iterator()메서드가 구현되어있다.
반환 타입은 Iterator이다.
그렇다면 Collection인터페이스를 상속받는 List, Set 인터페이스를 또 상속받는 ArrayList, LinkedList, Hashset, TreeSet 클래스들은 강제적으로 이 메서드를 오버라이딩하게 되어있다.
그렇다면 우리는 이렇게 표현할 수 있다.
List li = new ArrayList();
li.iterator(); (반환타입이 Iterator이다)
Iterator it = li.iterator();
이러면 참조변수 it를 통해 Iterator의 메서드들을 사용할 수 있게 된다.
Iterator의 메서드는 다음과 같다.
Iterator.hasNext()
들었으면 true, 안들었음 false
Iterator.next()
Iterator.remove()
컬렉션(List, Set, Map) 등에서 삭제
반드시 next() 후에 사용해야 함
반면 Map은 Collection인터페이스를 상속받는 클래스가 아니다.
하지만 Map 인터페이스의 메서드중에 entrySet();이라는 메서드가 있는데
이것의 반환타입은 Set이다.
Map<K, V> m = new HashMap<>(); 라면
m.entrySet();의 반환타입은 Set<Map.Entry<K, v>>가 된다.
Set인터페이스의 iterator메서드를 사용할 수 있게 된다.
Set s = m.entrySet();
Iterator it = m.entrySet().iterator();이 가능하게 된다.