ahnnyung ,/Java

[Java] Arrays.sort() & Collections.sort() 비교

hi,ho 2021. 3. 19. 17:56
반응형
// new Random().nextInt로 초기화된 Array로 가정
int[] intArray = new int[50000000];
for (int i = 0; i < intArray.length; i++) {
    intArray[i] = new Random().nextInt(Integer.MAX_VALUE);
}
// 비교를 위한 List 생성
List<Integer> list = Arrays.stream(intArray).boxed().collect(Collectors.toList());

startTime = System.nanoTime();
Collections.sort(list);
endTime = System.nanoTime();
System.out.println("#1 " + TimeUnit.MILLISECONDS.convert((endTime - startTime), TimeUnit.NANOSECONDS) + "ms");

startTime = System.nanoTime();
Arrays.sort(intArray);
endTime = System.nanoTime();
System.out.println("#2 " + TimeUnit.MILLISECONDS.convert((endTime - startTime), TimeUnit.NANOSECONDS) + "ms");

 

 

결과

Arrays.sort() 속도 승.

 

[링크]에서는 Arrays.sort()는 Dual-Pivot Quicksort(Insertion Sort + Quick Sort)를 이용하고, Collections.sort()는 Timsort(Insertion Sort + Merge Sort)를 사용한다고 설명되어있다.

 

그런데 실상 코드를 타고 들어가보니 Arrays.sort()는 Dual-Pivot Quicksort를 잘 이용하고있지만, Collections.sort()는 결국엔 Arrays.sort()를 호출하고 있는 것을 확인했다...

Arrays.sort() - DualPivotQuicksort를 사용하고 있는 것을 확인 할 수 있다.

 

 

 

Collections.sort() - parameter로 받은 List의 sort를 호출. 내가 던져준 list는 ArrayList 타입이었으니, ArrayList.sort()를 호출하게 된다.
타고 들어가보니 결국 이놈도 Arrays.sort()를 호출하고 있다..

 

 

더 공부해봐야 할 것 같다...

반응형