Iterator 란?
Iterator는 자바의 컬렉션 프레임웍에서 컬렉션에 저장되어 있는 요소들을 읽어오는 방법을 표준화 하였는데 그 중 하나가 Iterator이다.
Iterator는 인터페이스인데 그 구성을 살펴보자.
public interface Iterator {
boolean hasNext();
Object next();
void remove();
}
boolean hasNext() 메소드는 읽어 올 요소가 남아있는지 확인하는 메소드이다. 있으면 true, 없으면 false를 반환한다.
Object next() 메소드는 읽어 올 요소가 남아있는지 확인하는 메소드이다. 있으면 true, 없으면 false를 반환한다.
void remove() 메소드는 next()로 읽어 온 요소를 삭제한다. next() 를 호출한 다음에 remove() 를 호출해야 한다. (선택적 기능이라 사용해도 그만 사용하지 않아도 그만이다)
Iterator는 다시 말해 인터페이스이다. 그렇다면 저 메소드들은 어떻게 정의가 되어있단 말인가?
List 혹은 Set 인터페이스를 구현하는 컬렉션은 iterator() 가 컬렉션의 특징에 맞게 설계가 되어있다.
Iterator 사용법
ArrayList<Integer> list = new ArrayList<Integer>();
for( Iterator<Integer> itr = list.iterator(); itr.hasNext(); )
{
list.get( itr.next() );
} | |
ArrayList<Integer> list = new ArrayList<Integer>();
Iterator<Integer> itr = list.iterator();
while( itr.hasNext() )
{
list.get( itr.next() );
}
|
Iterator를 활용해서 list의 모든 값을 가져온다.
Iterator VS List의 Size 이용하기
< 예제 소스>
package vaert;
import java.util.*;
public class Main {
public static void main(String[] args) {
long start = 0;
long end = 0;
int inRoopSize = 100;
int maxRoopSize = 10000000;
ArrayList<Integer> list = new ArrayList<Integer>();
ArrayList<Double> result = new ArrayList<Double>();
Double[] arr = new Double[10000000];
for (int i = 0; i < maxRoopSize; i++)
list.add(i);
// Iterator 사용 시 실행 시간
System.out.println("----Iterator 사용 시----");
for (int idx = 0; idx < inRoopSize; idx++) {
start = System.nanoTime(); // 시작시간
Iterator<Integer> itr = list.iterator();
while (itr.hasNext()) {
list.get(itr.next());
}
end = System.nanoTime(); // 끝나는 시간
result.add(((double) (end - start) / 1000000000));
}
for (int i = 0; i < inRoopSize; i++)
arr[i] = result.get(i);
for (int i = 0; i < inRoopSize; i++)
for (int j = 0; j < inRoopSize; j++)
if (arr[i] < arr[j]) {
double temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
for (int i = 0; i < 10; i++)
System.out.println((i + 1) + " : " + arr[i] + "(sec)");
System.out.println();
// Size 받아온 코드 실행 시간
System.out.println("-----Size 받아오는 방법 사용 시-----");
for (int idx = 0; idx < inRoopSize; idx++) {
start = System.nanoTime();
int size = list.size();
for (int i = 0; i < size; i++) {
list.get(i);
}
end = System.nanoTime();
result.add(((double) (end - start) / 1000000000));
}
arr = new Double[10000000];
for (int i = 0; i < inRoopSize; i++)
arr[i] = result.get(i);
for (int i = 0; i < inRoopSize; i++)
for (int j = 0; j < inRoopSize; j++)
if (arr[i] < arr[j]) {
double temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
for (int i = 0; i < 10; i++)
System.out.println((i + 1) + " : " + arr[i] + "(sec)");
}
}
< 결과 >
for( Iterator<Integer> itr = list.iterator(); itr.hasNext(); )
{
list.get( itr.next() );
} |
1 : 0.309012652(sec)
2 : 0.309870762(sec)
3 : 0.310434898(sec)
4 : 0.311340917(sec)
5 : 0.312230778(sec)
6 : 0.312908024(sec)
7 : 0.313480948(sec)
8 : 0.314196465(sec)
9 : 0.314853301(sec)
10 : 0.31523232(sec)
|
int size = list.size();
for( int i = 0; i < size; i++ )
{
list.get( i );
}
|
1 : 0.041885812(sec) 乃 Best
2 : 0.041918697(sec)
3 : 0.042251792(sec)
4 : 0.04225406(sec)
5 : 0.042269085(sec)
6 : 0.042285244(sec)
7 : 0.042312175(sec)
8 : 0.042338539(sec)
9 : 0.042373124(sec)
10 : 0.042443145(sec)
|
'IT개발 > Java' 카테고리의 다른 글
[Java] StringBuffer 클래스에 대해서 앞아보 (0) | 2014.04.02 |
---|---|
[Java] 일정 시간을 기다리게 하는 sleep 메소드 사용법 (0) | 2014.04.01 |
[Java] HashMap 함수 제대로 알고 사용하기 (1) | 2014.03.28 |
[Java] 자바 예약어 총정리 (1) | 2014.03.27 |
[Java] Static 키워드 바로 알고 사용하자 (15) | 2014.03.25 |