Iterable, Iterator
Iterable, Iterator
데이터를 순회할 때 사용하는 인터페이스
Iterable: “반복 가능한” 이라는 뜻Iterator: “반복자” 라는 뜻
주요 메서드
1
2
3
4
public interface Iterable<T> {
Iterator<T> iterator();
}
iterator(): Iterator 반복자 반환
1
2
3
4
5
6
public interface Iterator<E> {
boolean hasNext();
E next();
}
hasNext(): 다음 요소가 있는지 확인. 있으면True반환next(): 다음 요소를 반환
상속 구조
Collection인터페이스를 상속받은 자료구조는 모두Iterable과Iterable을 통해 순회 가능Map은Collection을 상속하지 않기 때문에 순회할 수 없으나,keySet(),values(),entrySet()을 통해 추출하여 순회 가능
직접 만들어 보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class MyArrayIterator implements Iterator<Integer> {
private int currentIndex = -1;
private int[] targetArr;
public MyArrayIterator(int[] targetArr) {
this.targetArr = targetArr;
}
@Override
public boolean hasNext() {
return currentIndex < targetArr.length - 1;
}
@Override
public Integer next() {
return targetArr[++currentIndex];
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class MyArray implements Iterable<Integer> {
private int[] numbers;
public MyArray(int[] numbers) {
this.numbers = numbers;
}
@Override
public Iterator<Integer> iterator() {
return new MyArrayIterator(numbers);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
public class MyArrayMain {
public static void main(String[] args) {
MyArray myArray = new MyArray(new int[]{1, 2, 3, 4});
Iterator<Integer> iterator = myArray.iterator();
System.out.println("iterator 사용");
while (iterator.hasNext()) {
Integer value = iterator.next();
System.out.println("value = " + value);
}
}
}
Iterable을 구현한 객체에서Iterator를 사용하여 순회
향상된 for문
자바에서는 향상된 for문이라는 문법을 제공합니다. 향상된 for문을 통해 더욱 간결하게 코드 작성이 가능합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class MyArrayMain {
public static void main(String[] args) {
MyArray myArray = new MyArray(new int[]{1, 2, 3, 4});
Iterator<Integer> iterator = myArray.iterator();
System.out.println("iterator 사용");
while (iterator.hasNext()) {
Integer value = iterator.next();
System.out.println("value = " + value);
}
// 향상된 for문
System.out.println("for-each 사용");
for (int value : myArray) {
System.out.println("value = " + value);
}
}
}
향상된 for문은Iterable을 구현한 객체여야 합니다.
향상된 for문을 컴파일 하면 위while문으로 변환 됩니다.
참고
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.
