티스토리 뷰
Iterator<E> 인터페이스
- 자바의 컬렉션 프레임워크는 컬렉션에 저장된 요소를 읽어오는 방법을 Iterator 인터페이스로 표준화하고 있다.
- Collection 인터페이스를 상속받은 List와 Set 인터페이스에서 iterator() 메소드를 사용할 수 있다.
Iterator 인터페이스 메소드
- boolean hasNext() : 해당 iteration이 다음 요소를 가지고 있으면 true를 반환하고, 더 이상 다음 요소를 가지고 있지 않으면 false를 반환한다.
- E next() : iteration의 다음 요소를 반환한다.
- default void remove() : 해당 iterator로 반환되는 요소를 현재 컬렉션에서 제거한다.
ArrayList<Integer> arrList = new ArrayList<>();
arrList.add(3);
arrList.add(2);
arrList.add(1);
Iterator<Integer> it = arrList.iterator();
while(it.hasNext()){
System.out.print(it.next() + ", ");
}
/*
출력 결과 : 3, 2, 1,
*/
Iterator<Integer> it = arrList.iterator();
while(it.hasNext()){
int value = it.next();
if(value == 3){
it.remove();
}
}
System.out.println(arrList);
/*
출력 결과 : [2, 1]
*/
이중 iterator 사용 불가
String[] arr1 = {"A", "B", "C"};
String[] arr2 = {"Apple", "Black", "Crown"};
List<String> arrList1 = Arrays.asList(arr1);
List<String> arrList2 = Arrays.asList(arr2);
for(Iterator it1 = arrList1.iterator(); it1.hasNext();){
for(Iterator it2 = arrList2.iterator(); it2.hasNext();){
System.out.print(it1.next() + ":" + it2.next());
}
System.out.println();
}
/*
기대했던 출력 결과
1+9 1+8 1+7
2+9 2+8 2+7
3+9 3+8 3+7
출력 결과
1+9 2+8 3+7
*/
바깥 for문 1회 당 내부 for문이 실행되는 결과를 기대했지만 내부 for문에서 it2.next()가 호출되면서 it1.next()도 같이 실행되면서 반복문이 끝나버리는 문제가 발생한다.
for-each문
String[] arr1 = {"1", "2", "3"};
String[] arr2 = {"9", "8", "7"};
List<String> arrList1 = Arrays.asList(arr1);
List<String> arrList2 = Arrays.asList(arr2);
for(String value1 : arr1){
for(String value2 : arr2){
System.out.print(value1 + "+" + value2 + " ");
}
System.out.println();
}
/*
출력 결과
1+9 1+8 1+7
2+9 2+8 2+7
3+9 3+8 3+7
*/
현재 자바에서는 될 수 있으면 JDK 1.5부터 추가된 for each 문을 사용하도록 권장하고 있다. 하지만 요소의 선택적 제거나 대체 등을 수행하기 위한 경우에는 iterator를 사용해야만 한다.
참고
'Language > Java' 카테고리의 다른 글
데이터 타입별 형변환 방법 (0) | 2021.02.22 |
---|---|
copyOf() / copyOfRange() (0) | 2021.02.18 |
Arrays / Collections (0) | 2021.02.18 |
Maven 프로젝트에서 Servlet 3.1로 업그레이드 하기 (0) | 2021.01.06 |
Servlet 버전별 작성 방법 (0) | 2021.01.05 |
댓글