///
Search
🔁

선택문, 반복문?

태그
JAVA
이미 알고 있는 것도 있고 아닌 것도 있는데 처음부터 정리하는것에 대한 부담감이 확 들었다. 그래서 내가 모르는 게 있었다면 그것에 대하여 기술하려고 한다!
예전에 본 것이다. streamfor의 성능차이에 대한 영상인데 boxing작업 때문에 발생하는 오버헤드가 있고 어떤 상황에서 streamfor을 나누어 작업하는 것이 좋은지에 대하여 설명해주었다.
사진은 내가 정리한 글이다.

좋은 습관 좋지 못한 습관

// 좋지 못한 습관 for(int i = 0; i < list.size(); i++){ ... // size()메서드가 매번 반복하면서 호출됨 // 조금 더 좋은 습관 int size = list.size(); for(int i = 0; i < size; i++){ ... // size() 메서드가 한번만 호출됨 //향상된 for문 List<String> list = new ArrayList<>(); for(String str : list){... // 객체를 바로 사용할 수 있고 인덱스가 넘어가는 등에 예외코드를 없앨 수 있음
Java
복사
그럼 과연 저 3가지의 성능은? 1번은 2ms 2번은 1ms 3번은 16ms 나왔다.
public static void main(String[] args) { List<Integer> list = IntStream.rangeClosed(0, 100_000).boxed().collect(Collectors.toList()); StopWatch stopWatch = new StopWatch(); stopWatch.start(); int result = 0; for (int i = 0; i < list.size(); i++) { result += i; } System.out.println(result); stopWatch.stop(); System.out.println("startTime : " + stopWatch.getStartTime()); System.out.println("elapsedTime(ms) : " + stopWatch.getTime()); System.out.println("elapsedTime(ns) : " + stopWatch.getNanoTime()); -- 705082704 startTime : 1658039330327 elapsedTime(ms) : 2 elapsedTime(ns) : 2868600 stopWatch = new StopWatch(); stopWatch.start(); result = 0; int size = list.size(); for (int i = 0; i < size; i++) { result += i; } System.out.println(result); stopWatch.stop(); System.out.println("startTime : " + stopWatch.getStartTime()); System.out.println("elapsedTime(ms) : " + stopWatch.getTime()); System.out.println("elapsedTime(ns) : " + stopWatch.getNanoTime()); -- 705082704 startTime : 1658039330349 elapsedTime(ms) : 1 elapsedTime(ns) : 1294400 stopWatch = new StopWatch(); stopWatch.start(); result = 0; for (int i : list) { result += i; } System.out.println(result); stopWatch.stop(); System.out.println("startTime : " + stopWatch.getStartTime()); System.out.println("elapsedTime(ms) : " + stopWatch.getTime()); System.out.println("elapsedTime(ns) : " + stopWatch.getNanoTime()); -- 705082704 startTime : 1658039330351 elapsedTime(ms) : 16 elapsedTime(ns) : 16952000 }
Java
복사
Apatch StopWatch 사용
선택의 함정 if-elseswitch가 얼핏 똑같은데 무슨 차이가 있을까? 라는 의문이 들었다(속도가 아닐까?). 하여튼 그래서 찾아본 결과 if-else의 경우 여러 선택 사항을 구현하면 실행속도가 느려진다. 하지만 switch의 경우 선택지가 여러가지인 경우 실행속도가 if-else 보다 훨씬 빠르다라고 설명하고 있었다. 그래서 성능을 비교하려고 했는데 좋은 글을 찾았다. 직접 10개에서 100개로 조건식을 늘려 비교했는데 약, 2배 이상으로 switch-case문의 성능이 더 좋은 것으로 나타났다. 꼭 보자