not done
due this week
short mode
TODO
LOG
배운 것
stream().sorted()
는 스트림을 소비하지 않고 단순히 파이프라인에 연산을 추가하기 때문에 그 자체로 O(1) 이다.
SortedSet
같은 자료구조 라면 아무 작업도 수행하지 않는다. -> O(1)
- stream 이 병렬이 아니라면
Arrays.sort()
에 위임한다. -> O(NlogN)
- stream 이 병렬이면
Arrays.parallelSort()
에 위임한다. -> O(NlogN)
- Quick Sort 는 불안정정렬이지만, primitive 타입의 경우 안정 / 불안정이 상관이 없다. ->
Arrays.sort(primivite type array)
인 경우에는 Dual Pivot QuickSort 가 사용된다.
Collections.sort()
는 Timsort 를 사용하기 때문에 안정 정렬이다. 즉, 안정 정렬이 필요한 객체 배열 같은 경우 사용하면 좋다.
- Quick sort 는 메모리를 덜 사용하지만, Timsort 처럼 배열에서 이미 정렬된 데이터의 실행을 활용할 수 없다.
- primitive array 는 특정 상황에서만 Quicksort 를 사용한다. 더 큰 배열의 경우, Timsort 처럼 미리 정렬된 데이터의 실행을 먼저 식별하고, 실행 횟수가 특정 임계값을 초과하지 않으면 MergeSort 를 시도한다. 배열의 크기가 작은 경우, 삽입 정렬로 돌아가는 구현을 사용한다.
느낀 것