Java Iterator Methods
자바에서의 Iterator 메서드 (Java Iterator Methods)
- *
Iterator
*는 자바에서 컬렉션(Collection) 객체의 요소들을 순차적으로 접근하기 위해 제공되는 인터페이스입니다.Iterator
는
패키지에 속하며, 리스트(List), 셋(Set), 맵(Map) 등 다양한 컬렉션 객체에서 사용됩니다..util.Iterator
Iterator
는 컬렉션 요소를 반복적으로 처리할 수 있는 기능을 제공하며, 주로while
또는for
루프와 함께 사용됩니다.
Iterator 생성
Iterator
는 컬렉션 객체의 iterator()
메서드를 호출하여 생성됩니다. 이때 Iterator
객체는 컬렉션의 요소를 순차적으로 탐색할 수 있게 해줍니다.
Iterator 생성 예시
import java.util.ArrayList;
import java.util.Iterator;
public class Main {
public static void main(String[] args) {
// ArrayList 생성 및 값 추가
ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Orange");
// Iterator 생성
Iterator<String> iterator = list.iterator();
// Iterator를 사용하여 리스트 요소 출력
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
설명:
list.iterator()
:ArrayList
에서Iterator
를 생성하여 리스트의 요소를 순차적으로 접근할 수 있게 합니다.- *
hasNext()
*와next()
메서드를 사용하여 반복문을 통해 요소를 처리합니다.
주요 Iterator
메서드
1. hasNext()
: 다음 요소가 있는지 확인
hasNext()
메서드는 컬렉션의 다음 요소가 존재하는지 여부를 확인합니다. 다음 요소가 있으면 true
,
없으면 false
를 반환합니다.
import java.util.ArrayList;
import java.util.Iterator;
public class Main {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Orange");
Iterator<String> iterator = list.iterator();
// 다음 요소가 있는지 확인하면서 반복
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
설명:
hasNext()
는 다음 요소가 있는지 확인할 때 사용됩니다. 주로while
루프와 함께 사용되어 컬렉션의 모든 요소를 순차적으로 처리할 수 있습니다.
2. next()
: 다음 요소 가져오기
next()
메서드는 다음 요소를 반환합니다. 이 메서드는 반복적으로 호출되어 컬렉션의 각 요소를
순차적으로 가져옵니다.
import java.util.ArrayList;
import java.util.Iterator;
public class Main {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
Iterator<String> iterator = list.iterator();
// 첫 번째 요소 가져오기
System.out.println("첫 번째 요소: " + iterator.next());
// 두 번째 요소 가져오기
System.out.println("두 번째 요소: " + iterator.next());
}
}
설명:
next()
는 컬렉션의 다음 요소를 반환하며, 내부적으로 커서를 다음 위치로 이동시킵니다.- 호출할 때마다 다음 요소로 이동하여 값을 반환합니다. 요소가 없으면
NoSuchElementException
예외가 발생할 수 있습니다.
3. remove()
: 현재 요소 제거
remove()
메서드는 next()
로 반환된 현재 요소를 컬렉션에서 제거합니다. 단, 이 메서드는 반드시
**next()
**를 호출한 후에 사용할 수 있습니다.
import java.util.ArrayList;
import java.util.Iterator;
public class Main {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Orange");
Iterator<String> iterator = list.iterator();
// 첫 번째 요소를 제거
if (iterator.hasNext()) {
iterator.next(); // 첫 번째 요소로 이동
iterator.remove(); // 첫 번째 요소 제거
}
System.out.println(list); // 출력: [Banana, Orange]
}
}
설명:
remove()
는 현재Iterator
가 가리키는 요소를 컬렉션에서 제거합니다.next()
메서드를 호출하여 현재 요소를 반환한 후에만remove()
를 호출할 수 있습니다.
4. forEachRemaining()
: 남은 요소 처리
forEachRemaining()
메서드는 컬렉션의 남은 모든 요소를 람다식을 사용하여 처리합니다. 이
메서드는 반복 작업을 간결하게 처리하는 데 유용합니다.
import java.util.ArrayList;
import java.util.Iterator;
public class Main {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Orange");
Iterator<String> iterator = list.iterator();
// 남은 요소를 람다식을 사용하여 출력
iterator.forEachRemaining(fruit -> System.out.println(fruit));
}
}
설명:
forEachRemaining()
은Iterator
에서 아직 처리되지 않은 모든 요소에 대해 작업을 수행하는 람다식을 적용합니다.
Iterator
의 활용 예시
1. Iterator
를 사용한 리스트 탐색 및 삭제
Iterator
는 컬렉션에서 요소를 순차적으로 탐색하며, 동시에 안전하게 요소를 제거할 수 있는 유일한
방법 중 하나입니다.
import java.util.ArrayList;
import java.util.Iterator;
public class Main {
public static void main(String[] args) {
ArrayList<String> fruits = new ArrayList<>();
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
fruits.add("Mango");
Iterator<String> iterator = fruits.iterator();
// "Orange"라는 요소를 삭제
while (iterator.hasNext()) {
String fruit = iterator.next();
if (fruit.equals("Orange")) {
iterator.remove(); // 안전하게 요소 제거
}
}
System.out.println(fruits); // 출력: [Apple, Banana, Mango]
}
}
설명:
Iterator
는 반복문에서 안전하게 요소를 삭제할 수 있도록 해줍니다.for-each
루프에서 요소를 삭제하면 **ConcurrentModificationException
*이 발생할 수 있지만,Iterator
는 이를 방지합니다.
2. 맵(Map)의 Iterator
사용
- *
HashMap
*과 같은 맵에서Iterator
를 사용하려면 **entrySet()
*을 통해 각 **키-값 쌍(Map.Entry)**을 순회할 수 있습니다.
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class Main {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
map.put("Apple", 10);
map.put("Banana", 15);
map.put("Orange", 20);
Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();
// Map의 모든 키-값 쌍 출력
while (iterator.hasNext()) {
Map.Entry<String, Integer> entry = iterator.next();
System.out.println("키: " + entry.getKey() + ", 값: " + entry.getValue());
}
}
}
출력:
키: Apple, 값: 10
키: Banana, 값: 15
키: Orange, 값: 20
설명:
HashMap
의entrySet()
을 통해Iterator
를 사용하여 맵의 요소를 순회할 수 있습니다.- 키와 값을 각각 출력하거나 필요에 따라 수정, 제거할 수 있습니다.
요약
자바의 **Iterator
**는 컬렉션의 요소를 순차적으로 접근하는 데 사용되며, 컬렉션에서 안전하게 요소를
삭제하거나 처리할 수 있습니다. 주요 메서드는 다음과 같습니다:
hasNext()
: 다음 요소가 있는지 확인next()
: 다음 요소를 가져오기remove()
: 현재 요소를 컬렉션에서 제거forEachRemaining()
: 남은 요소를 람다식으로 처리
Iterator
는 리스트(List), 셋(Set), 맵(Map) 등 다양한
컬렉션과 함께 사용되어 요소를 반복적으로 처리하고, 동시에 요소를 안전하게 제거하는 데 매우 유용합니다.