-Collection 인터페이스에 iterator()메소드가 정의되어 있기 때문에 List와 set은 iterator()를 가지고 있다.
Collection list = new ArrayList(); // 다른 컬렉션으로 변경할 때는 이 부분만 고친다.
//Collection 부모타입으로 자식타입을 받으면 ArrayList가 set으로 변경되어도 코드 고칠필요 없이 작동 가능.
Iterator it = list.iterator(); // iterator 객체를 반환한다.
while(it.hasNext()) { // 읽어올 요소가 있는지 확인하는 boolean(있으면 true)
System.out.println(it.next()); // 요소를 읽어온다.
}
/*
while이 끝나면 더이상 읽어올 것이 없기 때문에 밑에 while문을 한번 더 써도 실행되지 않는다(false로 바로 빠져나옴)
iterator를 다 쓰고 나면(한번 다 읽어오고 나면) 다시ㅣ
it = list.iterator();를 써야 한다.
★ iterator는 1회용이라 다 쓰고 나면 다시 얻어와야 한다. ★
*/
collection framework를 사용하다 보면 set을 list로 바꿔 쓸 때가 있는데, 그럴 때 iterator를 사용하면 코드를 변경할 필요가 없으므로 효율적이다.
public static void main(String[] args) {
Collection c = new TreeSet(); // 다른 컬렉션으로 변경할 때는 이 부분만 고친다.
// Collection c = new HashSet();
// c의 경우 set, list 둘다 들어올 수 있어서 유연한 코드로 사용이 가능하다.
c.add("1");
c.add("2");
c.add("3");
c.add("4");
c.add("5");
Iterator it = c.iterator();
while (it.hasNext()) {
Object obj = it.next();
System.out.println(obj);
}
//Map은 iterator()가 없다. keySet(), entrySet(), values()를 호출해야 한다.
}