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 |
---|