예제
import java.util.ArrayList;
import java.util.Iterator;
public class Collection_FrameworkIterator01 {
public static void main(String[] args) {
//[1] : 객체 생성
ArrayList<String> list = new ArrayList<String>();
//[2] : 요소 추가 -> add()
list.add("Allgator");
list.add("Hippo");
list.add("Ostrich");
list.add("Donkey");
//[3] : Iterator(반복자) 객체 생성 -> 객체 생성 과정도 중요!
// System.out.println(hasNext()); // Error
//Collection 인터페이스 -> iterator() 메서드를 정의하고 있고 -> 이를 상속받는게 List, Set 인터페이시이므로
//List, Set 인터페이스를 상속받아 구현한 클래스들 객체를 통해서 Iterator() 메서드를 사용할 수 있다.
Iterator<String> iter = list.iterator();
//[4] : Iterator(반복자) 메서드 사용 -> hasNext(), next(), remove()
// System.out.println(iter.hasNext()); // true -> why? -> 첫 번째 요소인 "Allgator"가 있으므로
// System.out.println(iter.next()); // Allgator
// System.out.println(iter.hasNext()); // true -> why? -> 두 번째 요소인 "Hippo"가 있으므로
// System.out.println(iter.next()); // Hippo
// System.out.println(iter.hasNext()); // true -> why? -> 세 번째 요소인 "Ostrich"가 있으므로
// System.out.println(iter.next()); // Ostrich
// System.out.println(iter.hasNext()); // true -> why? -> 네 번째 요소인 "Donkey"가 있으므로
// System.out.println(iter.next()); // Donkey
// System.out.println(iter.hasNext()); // false
// System.out.println(iter.next()); // Error
//[5] : 요소 출력 -> 향상된 for문
for(String s : list) {
System.out.println(s);
}
//[6] : 요소 출력 -> while 반복문 사용
System.out.printf("%n--- Iterator 출력---%n");
while(iter.hasNext()){
String str = iter.next();
System.out.println(str);
}
//[7] : 요소 삭제후 출력
System.out.printf("%n--- Iterator 삭제 ---%n");
while(iter.hasNext()) {
String str = iter.next();
if("Hippo".equals(str)) {
iter.remove();
System.out.println("Hippo 삭제");
}
}
}
}
1. ArrayList와 Iterator 객체 생
먼저 String 타입의 데이터를 저장할 수 있는 ArrayList 객체인 "lsit"를 생성하고, 그 후 Iterator를 이용하여 ArrayList의 데이터에 접근한다.
ArrayList<String> list = new ArrayList<String>();
Iterator<String> iter = list.iterator();
2. ArrayList에 요소 추가하기
다음으로 add() 메서드를 사용하여 ArrayList에 원하는 데이터를 추가한다.
list.add("Alligator");
list.add("Hippo");
list.add("Ostrich");
list.add("Donkey");
3. Iterator를 이용한 요소 접근과 출력
Iterator 인터페이스의 hasNext()와 next() 메서드를 이용하면 ArrayList의 요소에 순차적으로 접근할 수 있다. hasNext()는 읽어올 요소가 남아있는지를 검사하고, next()는 다음 요소를 읽어오는 역할을 한다. 이 두 메서드를 while반복문과 함께 사용하여 ArrayList의 모든 요소를 순차적으로 출력할 수 있다.
while(iter.hasNext()){
String str = iter.next();
System.out.println(str);
}
이 코드는 ArrayList의 모든 요소를 순차적으로 접근하고, 각 요소를 콘솔에 출력한다. while반복문은 Iter.hasNext()가 true를 반환하는 한 계속 실행되므로, ArrayList의 모든 요소를 순차적으로 접근하게 된다. 그리고 iter.next()는 현재 요소를 가져오고 Iterator를 다음 위치로 이동시키므로, 각 반복에서 다음 요소를 가져와 출력하게된다.
4. Iterator를 이용한 요소 삭제
Iterator의 remove() 메서드를 사용하면 요소를 삭제할 수 있다. 주의할 점은 remove()는 항상 next() 메서드의 호출 뒤에 이어져야 하며, 이전에 next()로 읽어온 요소를 삭제하는 메서드이다.
while(iter.hasNext()) {
String str = iter.next();
if("Hippo".equals(str)) {
iter.remove();
System.out.println("Hippo 삭제");
}
}
주의사항
Iterator를 사용하면서 주의해야할 점은 next() 메서드를 호출할 때, 더이상 읽어올 요소가 없는데 호출하면 "NoSuchElementException"이 발생한다는 점이다. 따라서 항상 next() 메서드를 호출하기 전에 hasNext() 메서드를 통해 요소가 남아 있는지 확인해야 한다. 이를 확인하지 않고 next() 메서드를 호출하면 프로그램 실행 중에 오류가 발생할 수 있다.
if(iter.hasNext()){
System.out.println(iter.next());
}else{
System.out.println("더 이상 출력할 요소가 없습니다.");
}
이렇게 하면, Iterator를 사용하여 ArrayList의 요소에 안전하게 접근하고 필요한 경우 요소를 삭제하는 등의 작업을 할 수 있다.
'Java > JAVA 100 문제 풀이' 카테고리의 다른 글
자바 part.5 문제풀이 - 컬렉션 프레임워크에서 ConcurrentModificationException 피하는 방법: Iterator 활용하기 (0) | 2023.08.02 |
---|---|
자바 part.5 문제풀이 - Iterator 이해와 활용 방법 (0) | 2023.08.01 |
자바 part.5 문제풀이 - ArrayList를 활용한 2차원 배열 데이터 처리 (0) | 2023.08.01 |
자바 part.5 문제풀이 - ArrayList를 활용한 데이터 처리 (0) | 2023.08.01 |
자바 part.5 문제풀이 - ArrayList : 동적 데이터 구조의 이해와 활용 (0) | 2023.08.01 |