Iterator는 ArrayList,HashSet과 같은 컬렉션을 반복하는 데 사용할 수 있는 객체다. Iterator는 반복의 기술 용어이기 때문에 반복자라고 한다.
사실 반복은 for나 while을 통해서도 충분히 가능하다. 하지만 왜 Iterator를 쓸까?
Iterator는 for나 while같은 반복문이 할 수 없는 일을 할 수 있다.
예를들어, iterator를 사용하는 동안에 요소를 제거할 수 있다.
리스트는 또한 양방향으로 반복할 수 있는 iterator를 제공한다. 반면에 for같은 반복문은 처음부터 끝까지 반복된다. 예를들어 LinkedList에서 i번째 요소에 접근할때 for문은 처음부터 i 번째까지 모든 요소르 반복해야 해서 성능이 나빠진다. 반면 iterator는 이러한 문제가 없다.
Iterator의 장점
1. 컬렉션에서 요소를 제어하는 기능
2. next() 및 previous()를 써서 앞뒤로 이동하는 기능
3. hasNext()를 써서 더 많은 요소가 있는지 확인하는 기능
[예제1] ArrayList에 iterator 사용하는 예시
import java.util.ArrayList;
import java.util.Iterator;
public class Main
{
public static void main(String[] args)
{
// 컬렉션 생성
ArrayList<String> cars = new ArrayList<>();
cars.add("벤츠");
cars.add("람보르기니");
cars.add("롤스로이스");
cars.add("페라리");
// iterator 획득
Iterator<String> iterator = cars.iterator();
// while문을 사용한 경우
while(iterator.hasNext())
{
String str = iterator.next();
System.out.println(str);
}
// for-each문을 사용한 경우
for (String str : cars)
{
System.out.println(str);
}
}
}
// >> 벤츠
// >> 람보르기니
// >> 롤스로이스
// >> 페라리
[예제2] Set을 사용할 경우 iterator 사용법
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class Main
{
public static void main(String[] args)
{
Set<String> cars = new HashSet<>();
cars.add("벤츠");
cars.add("람보르기니");
cars.add("롤스로이스");
cars.add("페라리");
// while문을 사용한 경우
Iterator<String> iterator = cars.iterator();
while(iterator.hasNext())
{
System.out.println("cars : " + iterator.next());
}
// for-each문을 사용한 경우
for (String car : cars)
{
System.out.println("cars : " + car);
}
}
}
// >> cars : 람보르기니
// >> cars : 롤스로이스
// >> cars : 페라리
// >> cars : 벤츠
[예제] iterator 이용해 값 수정하기
import java.util.ArrayList;
import java.util.ListIterator;
public class Main
{
public static void main(String[] args)
{
// 컬렉션 생성
ArrayList<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");
list.add("F");
System.out.println("while문 지나기 전 리스트에 들어있던 값 : " + list);
// 리스트에 들어있는 값에 각각 '+' 붙이기
ListIterator<String> listIterator = list.listIterator();
while(listIterator.hasNext())
{
Object element = listIterator.next();
listIterator.set(element + "+");
}
System.out.println("while문 지난 후 수정된 결과 : " + list);
// 리스트에 들어있는 값을 역순으로 표시
System.out.print("역순 출력 결과 : ");
while(listIterator.hasPrevious())
{
Object element = listIterator.previous();
System.out.print(element + " ");
}
System.out.println();
}
}
// >> while문 지나기 전 리스트에 들어있던 값 : [A, B, C, D, E, F]
// >> while문 지난 후 수정된 결과 : [A+, B+, C+, D+, E+, F+]
// >> 역순 출력 결과 : F+ E+ D+ C+ B+ A+