2014-12-23 14 views
8

Java 8 giới thiệu một thuật toán song song cho phân loại đa luồng các mảng, dưới dạng các phương thức quá tải Arrays.sort().Tại sao Java 8 có Arrays.parallelSort() nhưng không phải là Collections.parallelSort()?

Tại sao nó cũng không cung cấp Collections.parallelSort(), để phân loại nhiều luồng List?

+3

'list.parallelStream(). Sort(). Collect (...)'? –

+0

Bản chất của 'Danh sách' cho phép chúng được sắp xếp khác nhau: Dễ dàng cắt và chèn các phần tử hoặc toàn bộ tăng dần" chạy "từ bất cứ đâu đến bất cứ đâu trong danh sách. Chèn hoặc xóa trong một mảng sẽ yêu cầu di chuyển trên mọi phần tử sau nó. Vì vậy, trong sắp xếp song song cho mảng, các phần tử được sắp xếp trong cụm cục bộ của chúng và sau đó được hợp nhất trên toàn cầu, nhưng không có lý do nào để hạn chế một loại 'List' thành cùng một cơ chế. –

+5

Thực ra đây không phải là bản sao; đó là một câu hỏi lý do, không phải là câu hỏi hướng dẫn. Các mảng thừa nhận phân loại song song dễ dàng vì chúng có thể dễ dàng phân đoạn thành các đoạn mà các luồng có thể hoạt động độc lập với các đặc tính hiệu suất đã biết để truy cập dữ liệu, vì vậy chúng ta biết rằng sắp xếp song song tại chỗ thực sự thực tế. Đối với Danh sách, chúng tôi không đảm bảo rằng việc sắp xếp song song tại chỗ sẽ thực tế. –

Trả lời

2

A List không nhất thiết cho phép thực hiện hiệu quả các thuật toán sắp xếp song song giống nhau mà một mảng thực hiện. Bạn có thể trực tiếp áp dụng nó cho một ArrayList, nhưng rất có thể không phải là LinkedList, do thiếu truy cập ngẫu nhiên hiệu quả. Có các thuật toán sắp xếp đa luồng hiệu quả cho loại danh sách đó, nhưng chúng khác với danh sách truy cập ngẫu nhiên.

Và, trên thực tế, việc triển khai an toàn chủ đề của giao diện List có thể không hỗ trợ phân loại đa luồng bên ngoài hiệu quả, do đồng bộ hóa. Việc cung cấp thuật toán phân loại chung cho những thuật toán đó là không thể, và trên thực tế, một thuật toán song song có thể chậm hơn so với thuật toán tuần tự.

Các vấn đề liên quan