티스토리 뷰

Language/Java

for-each / Iterator

Seogineer 2021. 2. 18. 21:06

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를 사용해야만 한다.

 

참고

www.tcpschool.com/java/java_collectionFramework_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
댓글
Total
Today
Yesterday
링크
Apple 2023 맥북 프로 14 M3, 스페이스 그레이, M3 8코어, 10코어 GPU, 512GB, 8GB, 한글