Arrays VS. Collection 정렬 속도 실험

알파로그·2023년 3월 18일
0

JAVA 문법과 지식

목록 보기
7/9
post-custom-banner

✏️ 발단

알고리즘 문제를 풀다가 나와 거의 동일한 방법으로 문제를 해결한 코드를 봤다.

나는 매개변수로 나온 Arrays 에서 바로 정렬을 했지만,

그 분은 ArrayList 로 변경 후 Collection 으로 정렬을 했었다.


효율이 어떻게 나올지 궁금해 복사해서 재출해보니 내 코드보다 효율이 더 좋았다.

내가 생각했을 때 배열을 리스트로 변환하는 시간이 더해저 더 오래걸릴 것이라고 생각했는데 아니였다.

혹시 모를 변수가 있을 수 있어서 실험을 해보기로 했다.


✏️ 실험 방법

길이가 99999 인 배열을 생성후 랜덤으로 숫자를 입력해주었다.

        int[] a = new int[99999];

        for (int i = 0; i < a.length; i++) {
            double v = Math.random() * 99999;
            a[i] = (int) v;
        }

검증 방법은 System.nanoTime() 라이브러리를 사용했다.

🔗 System.nanoTime()

        long start = System.nanoTime();

        Arrays.sort(a);

        long end = System.nanoTime();
        System.out.println((end-start) / 1000000.0);

✏️ 실험 결과

📍 Arrays.sort

난수를 입력했기 때문에 속도 편차가 조금 있는 것 같았다.

결과는 40~47 정도가 나왔다.

        long start = System.nanoTime();

        Arrays.sort(a);

        long end = System.nanoTime();
        System.out.println((end-start) / 1000000.0); // 40 ~ 47

📍 Collection.sort

Array List 를 선언하는 것 부터 시간을 측정했다.

결과는 47 ~ 51 정도가 나왔다.

        long start = System.nanoTime();

        ArrayList<Integer> list = new ArrayList<>();

        for (int i = 0; i < a.length; i++)
            list.add(a[i]);

        Collections.sort(list);

        long end = System.nanoTime();
        System.out.println((end-start) / 1000000.0); // 47 ~ 51

✏️ 결론

배열일 경우 배열 그 자체를 정렬하는 것이 효율이 근소하게 더 좋다.

하지만 List 를 사용하면 다양한 라이브러리를 사용할 수 있기때문에 그걸 포기할 만큼 효율이 떨어지진 않았다.


크게 차이 없으니 그때 그때 더 알맞는 방법을 사용하면 되겠다.

profile
잘못된 내용 PR 환영
post-custom-banner

0개의 댓글