[JAVA] Arrays.sort 와 Collections.sort의 차이

2024. 12. 4. 16:15·ALGORITHM

안녕하세요.

오늘은 자바의 Arrays.sort와 Collections.sort의 차이에 대해 써보려고 합니다.

 

저는 블로그에 학습한 기록을 정리하는 것에 큰 의미를 두는 편이 아니라 그동안 노션에만 정리해왔었는데요.

저빼고 다 블로그 하고 있길래 시작합니다. . .

1일 1블챌... 레츠꼬. . .

 

아무튼.

 

 

 

 

 

 

    궁금하게된 이유

    Arrays.sort와 Collections.sort의 차이에 대해 궁금해하게 됐던 이유는,

    알고리즘 문제를 풀던 도중

    Collections.sort는 시간 초과가 나는데 Arrays.sort는 시간 초과가 나지 않아서였습니다.

     

     

     

     

     

    왜 Collections.sort가 Arrays.sort보다 성능이 좋을까?

    결론을 먼저 말하자면,

    Arrays.sort는 Dual-Pivot Quicksort를 사용하고( 기본 타입을 정렬할 때  )

    Collections.sort는 Timsort 알고리즘을 사용하기 때문입니다.

     

     

     

     

     

    Timsort  알고리즘

    합병 정렬과 삽입 정렬을 조합하여 구현되었습니다.

    최악의 경우 O(nlogn)의 시간 복잡도를 갖습니다.

     

     

     

     

     

     

    Dual Pivot Quicksort 알고리즘

    Arrays.sort()가 기본타입 배열(int[], double[])을 정렬할 때 사용됩니다.

    최악의 경우 O(n²)의 시간 복잡도를 갖습니다.

     

    동작 방식은 다음과 같습니다.

     

    1. 피벗 선택

        피벗을 선택합니다.

    2. 파티션 분할

        피벗을 기준으로 배열을 3부분으로 나눕니다.

    3. 재귀 호출

        각 부분에 대해 재귀적으로 정렬을 수행합니다.

    4. 병합

       재귀 호출이 끝난 정렬된 결과를 병합합니다.

     

     

     

     

     

     

     

    마무리

    기본타입을 정렬한다면, Arrays.sort는 최악의 경우 O(n²)의 시간 복잡도를 갖습니다.

    기본타입 정렬 시 Dual Pivot Quicksort알고리즘을 사용하기 때문입니다.

     

    Collections.sort(=List.sort)는 최악의 경우 O(nlogn)의 시간 복잡도를 갖습니다.

    Timsort알고리즘을 사용하기 때문입니다.

     

     

    주의

    객체 정렬이라면, Arrays.sort도 Timsort 알고리즘을 사용합니다.

    객체 정렬 시, 두 메서드의 성능차이는 없습니다!

     

    'ALGORITHM' 카테고리의 다른 글

    구간 칠하기  (0) 2025.04.17
    십진수를 2진수로, n진수를 m 진수로 - 진수 변환 [알고리즘/JAVA]  (1) 2025.04.11
    날짜와 시간 계산 - 시뮬레이션 [알고리즘]  (1) 2025.04.10
    [알고리즘] 비트마스크 (Bitmask)  (1) 2024.12.24
    [Algorithm] 이분탐색 알고리즘 - Upper Bound/Lower Bound  (0) 2024.12.08
    'ALGORITHM' 카테고리의 다른 글
    • 십진수를 2진수로, n진수를 m 진수로 - 진수 변환 [알고리즘/JAVA]
    • 날짜와 시간 계산 - 시뮬레이션 [알고리즘]
    • [알고리즘] 비트마스크 (Bitmask)
    • [Algorithm] 이분탐색 알고리즘 - Upper Bound/Lower Bound
    hyeblee
    hyeblee
    감자감자
    • hyeblee
      hyeblee
      hyeblee
    • 전체
      오늘
      어제
      • 분류 전체보기
        • PS
          • Programmers
          • BAEKJOON
          • CODETREE
        • ALGORITHM
        • JAVA
        • CS
          • 면접을 위한 CS전공지식
        • SPRING
        • 회고
    • 블로그 메뉴

      • 홈
      • 태그
      • 방명록
    • 링크

      • 깃허브
    • 공지사항

    • 인기 글

    • 태그

      java
      백준
      16954
      플레이데이터 백엔드 부트캠프 후기
      dfs
      구간 칠하기
      BFS
      java #deque #자바 #덱
      하한값
      spring #springboot #스프링 #스프링부트
      arrays.sort #collections.sort #list.sort #객체정렬 #배열정렬 #timsort #dual pivot quicksort #정렬 #자바
      반닫힌 구간
      숨바꼭질3
      java #스프링부트 #자바버전 #자바 버전 충돌 #jvm
      흐른 시간 계산
      알고리즘
      상한값
      플레이데이터 백엔드 후기
      15652
      탐색
      자바
      플레이데이터 백엔드
      backjoon
      흐른 일수 계산
      왔다 갔던 구역2
      spring #스프링 #스프링부트 #springboot #please sign in
      플레이데이터 백엔드 부트캠프
      날짜와 시간 계산
      BOJ
      백트래킹
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    hyeblee
    [JAVA] Arrays.sort 와 Collections.sort의 차이
    상단으로

    티스토리툴바