Arrays.sort vs Arrays.parallelSort

Hầu hết chúng ta đều sử dụng Arrays.sort() để sắp xếp các phần tử trong một array. Tuy nhiên trong JDK 8, chúng ta có thêm một hàm mới Arrays.parallelSort() có cùng tính năng với Arrays.sort().

Trong bài viết này chúng ta sẽ cùng nhau phân tích xem chúng khác nhau ở những điểm nào, và nên sử dụng chúng trong những trường hợp cụ thể nào.

Arrays.sort()

Arrays.sort() được dùng để sắp xếp các phần tử trong một array, nội bộ bên trong Arrays.sort sử dụng giải thuật quick sort để sắp xếp.

Method này hoạt động trên single-thread và có 2 biến thể chính:

  • sort(array) – sắp xếp tất cả các phần tử của array
  • sort(array, fromIndex, toIndex) – sắp xếp các phần tử của array từ fromIndex đến toIndex.
import java.util.Arrays;

public class Main {

    public static void main(String... args) {
        int[] array = { 10, 4, 6, 2, 1, 9, 7, 8, 3, 5 };
        Arrays.sort(array);
        for(int a : array) {
            System.out.printf(a + " ");
        }
    }
}

Output

1 2 3 4 5 6 7 8 9 10 

Hoặc sắp xếp một đoạn nhỏ trong array

import java.util.Arrays;

public class Main {

    public static void main(String... args) {
        int[] array = { 10, 4, 6, 2, 1, 9, 7, 8, 3, 5 };
        Arrays.sort(array, 2, 8);
        for(int a : array) {
            System.out.printf(a + " ");
        }
    }
}

Output

10 4 1 2 6 7 8 9 3 5 

Một số ưu và nhược điểm của Arrays.sort()

Ưu: Hoạt động tốt trên tập dữ liệu nhỏ

Nhược: Giảm hiệu năng trên tập dữ liệu lớn và không tận dụng được hệ thống có nhiều core.

Arrays.parallelSort()

Tương tự như Arrays.sort(), method này cũng có 2 biên thể tương tự

import java.util.Arrays;

public class Main {

    public static void main(String... args) {
        int[] array = { 10, 4, 6, 2, 1, 9, 7, 8, 3, 5 };
        Arrays.parallelSort(array);
        for(int a : array) {
            System.out.printf(a + " ");
        }
    }
}

Output:

1 2 3 4 5 6 7 8 9 10 
import java.util.Arrays;

public class Main {

    public static void main(String... args) {
        int[] array = { 10, 4, 6, 2, 1, 9, 7, 8, 3, 5 };
        Arrays.parallelSort(array, 2, 8);
        for(int a : array) {
            System.out.printf(a + " ");
        }
    }
}

Output

10 4 1 2 6 7 8 9 3 5 

Không giống như Arrays.sort(), Arrays.parallelSort() sử dụng giải thuật parallel sort-merge có thể hoạt động trên nhiều thread, chia array ban đầu thành các array con và sắp xếp chúng sau đó gộp lại thành array được sắp xếp hoàn chỉnh.

Tuy nhiên chúng ta nên sử dụng Arrays.parallelSort() khi kích thước của mảng lớn hơn 8192.

Một số ưu nhược điểm:

Ưu: hoạt động tốt trên tập dữ liệu lớn và có thể sử dụng nhiều core của hệ thống.

Nhược: Giảm hiệu năng trên các tập dữ liệu có số lượng phần tử nhỏ.

So sánh hiệu năng giữa Arrays.sort(), Arrays.parallelSort()

Dưới đây là bảng thống kê khi chạy thử 2 hàm này trên các tập dữ liệu khác nhau. Hệ thống được sử dụng trong bài test này là AMD A10 PRO 2.1Ghz quad-core processer và JDK 1.8.0_221.

Array Size Arrays.sort() Arrays.parallelSort()
1000 o.048 0.054
10000 0.847 0.425
100000 7.570 4.395
1000000 65.301 37.998

Như vậy chúng ta có thể thẩy rằng việc sử dụng đúng cách 2 method này cho phép chúng ta tăng hiệu suất đáng kể cho ứng dụng. Arrays.sort() hoạt động tốt trên tập dữ liệu ít phần tử trong khi tập dữ liệu có số lượng lớn thì Arrays.parallelSort() tỏ ra chiếm ưu thế.

Nguồn

https://www.baeldung.com/java-arrays-sort-vs-parallelsort

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x