컬렉션에 저장된 데이터를 접근하는데 사용되는 인터페이스



위 두 메서드는 이름만 다를뿐, 기능은 똑같다.

ListIterator는 Iterator의 접근성을 향상시킨 것이다.
(단방향 -> 양방향//다음 요소와 이전 요소를 모두 읽어올 수 있다.)

iterator는 Collection에 저장되어 있는 메서드이므로 List와 Set에서 모두 사용이 가능하다.
package javaplus.Collection;
import java.util.*;
class ListIterator {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
Iterator it = list.iterator();
while(it.hasNext()) {
Object obj = it.next();
System.out.println(obj);
}
//iterator는 1회용이라 다쓰고 나면 다시 얻어와야 한다.
it = list.iterator();
while(it.hasNext()){
Object obj = it.next();
System.out.println(obj);
}
for(int i =0; i<list.size(); i++){
Object obj = list.get(i);
System.out.println(obj);
}
}
}
주의할 점은
ArrayList list = new ArrayList(); -> HashSet list = new HashSet();
으로 바꾸면
for(int i =0; i<list.size(); i++){
Object obj = list.get(i);
System.out.println(obj);
위 코드를 출력하지 못해서 오류가 난다. HashSet()은 Set의 메서드이다. 하지만, get()은 List에 해당하는 메서드이므로 사용할 수 없다.
이와 달리,
Iterator it = list.iterator();
while(it.hasNext()) {
Object obj = it.next();
System.out.println(obj);
}
위 코드는 Set은 Collection의 자손이기 때문에, 정상 출력된다.
추가적으로
Set은 Collection의 자손이기 때문에 HashSet list = new HashSet();을 Collection list = new HashSet();으로 변경이 가능하다.
iterator는 Collection의 메서드이므로 Map에서는 사용할 수 없다.
따라서, ketSet(), entrySet(), values()와 같은 메서드를 이용해서 호출해야 한다.

Set eSet = map.entrySet();
Iterator it = eSet.iterator();