It's Ward

[오늘의 삽질] JAVA에서의 Linked List 데이터의 정수 합 속도 비교 실험 본문

Java/오늘의 삽질 - Truble Shooting

[오늘의 삽질] JAVA에서의 Linked List 데이터의 정수 합 속도 비교 실험

I'm ward 2022. 5. 28. 01:33

*오늘의 삽질은 개발과 연관은 있지만 가볍게 남겨놓은 기록입니다. 혹시라도 누군가가 보신다면 편하게 의견 남겨주시면 감사하겠습니다.

2022.05.28 - [회고록/TIL] - [프로그래머스/JAVA] 다리를 지나는 트럭

 

[프로그래머스/JAVA] 다리를 지나는 트럭

이 프로그램을 풀면서 중점적으로 진행했던 사항은 1. 실제 트럭이 이동하듯이 Queue 안의 데이터 들이 순서대로 이동하면서 시간을 측정하게 하고싶었다. 2. Linked List, Stream 사용 등 익숙하지 않

its-ward.tistory.com

 

해당 프로그램을 작성하면서 문득 생각이 들었다.

내가 지금 하고있는 방식이 과연 최적화가 되는 방식일까? 속도가 과연 빠를까?

물론 이 프로그램을 가독성 있게, 실제로 구현되는것처럼 되는것은 좋은데 나중에 실무에서 사용할 때, 어떤점이 가장 좋은방법일까를 고민했다.

항상 고민하지만 이번에 스트림을 쓰면서 갑자기 파파박 하고 떠오른 것이다.

간단하게 실험을 해보았다. 다른 코드는 고치지않고, 다리를 지나는 트럭에서 Bridge Queue의 전체 합을 구할 때, 어떤 방식이 가장 빠를까? 

 

1. Stream - mapToInt() - sum()

스트림을 이용해 mapToInt를 통해 모두 정수형으로 변경한 후 더해주는 방식이다.

currentBridgeWeight =bridgeQ.stream()
                            .mapToInt(w -> w)
                            .sum();

2. Stream - reduce()

스트림을 이용해 reduce를 이용해 더해주는 방식이다.

currentBridgeWeight =bridgeQ.stream()
                            .reduce(0, Integer::sum);

3.for each문

향상된 for문을 이용하여 더해보았다.

for(int i : bridgeQueue)
	currentBridgeWeight += i;

 

순서대로 각각 다음과 같은 결과가 나왔다.

인텔리제이에서 돌릴떄는 엄청나게 빠르던1. Stream - mapToInt() - sum(), 2. Stream - reduce() 이 실제 테스트 환경에서는 굉장히 느리게 작동하였다.

for Each문은 말도안되게 작동을 안했는데.. 인텔리제이에서도 작동이 안되었다. 프로그램 문제일 수도 있다 생각한다..

여기서, 나는 와 역시 Stream인가? 하고 감탄하고 있을때,

"아니 근데 굳이  비교할 때 마다 전체 무게를 더할 필요는 없지않나..?"

라고 생각하여 만들어 테스트하였을때.. 

자세한 코드는 해당 코드로..

2022.05.28 - [회고록/TIL] - [프로그래머스/JAVA] 다리를 지나는 트럭

 

[프로그래머스/JAVA] 다리를 지나는 트럭

이 프로그램을 풀면서 중점적으로 진행했던 사항은 1. 실제 트럭이 이동하듯이 Queue 안의 데이터 들이 순서대로 이동하면서 시간을 측정하게 하고싶었다. 2. Linked List, Stream 사용 등 익숙하지 않

its-ward.tistory.com

 

.......................... Stream 연습한다고 다 풀고나서 두시간을 더 공부했는데... 

 

오늘의 삽질.

계산방식 비교하면서 쓸 시간에 알고리즘을 잘 생각하자.

그래도 유익한 시간이였다..

 

 

Comments