Loop 문법과 속도



필자는 ArrayList를 즐겨쓰기 때문에 for문을 어떻게 쓰건 거의 상관없지만

LinkedList를 쓴다면 for문에 따라 속도영향이 있다.



0. list가 다음과 같이 있다고 가정

List<Integer> linkedList = new LinkedList<>();

List<Integer> arrayList = new ArrayList<>();


for (int i = 0; i < 100000; i++) {

linkedList.add(i);

arrayList.add(i);

}



1. 기본 3항 for문: 'for ( ;  ; )'

for (int i = 0; i < list.size(); i++) {

Integer value = list.get(i);

}

- 시간: 5382ms (arraylist의 경우: 4ms)



2. for each문: 'for (a : A)'

for (Integer value : list) {

}

- 시간: 2ms (arraylist의 경우: 4ms)

- JAVA 5에서 추가됨



3. while + iterator 문: 'while (iterator.hasNext())'

Iterator<Integer> iterator = list.iterator();


while (iterator.hasNext()) {

Integer value = iterator.next();

}

- 시간: 3ms (arraylist의 경우: 3ms)



4. 'forEach()' 문

list.forEach((value) -> {

});

- 시간: 42ms (arraylist의 경우: 46ms)

JAVA 8에서 추가됨

- 조금느릴 수 있지만 Parallel을 지원한다.



5. 결론

- linkedList의 경우: for-each문, while + iterator 문 이 빠르다.

- arrayList의 경우: 크게 차이없다.



위 내용에 대한 코드는 github에서 확인하실 수 있습니다.

https://github.com/ndukwon/Duk_Java_library/blob/master/src/com/duk/lab/java/FundamentalTest.java



Reference:

- https://dzone.com/articles/devoxx-2012-java-8-lambda-and


'Program Languages > Java' 카테고리의 다른 글

Custom Annotation 만들기  (0) 2017.06.26

+ Recent posts