2014-12-23 9 views
8

Java 8 introduce un algoritmo parallelo per l'ordinamento multi-thread degli array, nella forma dei metodi sovraccarichi Arrays.sort().Perché Java 8 ha Arrays.parallelSort() ma non Collections.parallelSort()?

Perché non fornisce anche un Collections.parallelSort(), per l'ordinamento multi-threaded di List?

+3

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

+0

La natura di 'List' consente di ordinarli in modo diverso: è facile tagliare e inserire elementi o intere" corse "ascendenti da qualsiasi parte in qualsiasi punto all'interno di una lista. L'inserimento o la cancellazione in un array richiederebbe lo spostamento su ogni elemento dopo di esso. Quindi, nell'ordinamento parallelo per gli array, gli elementi vengono ordinati nel loro cluster locale e quindi uniti a livello globale, ma non vi è alcun motivo per vincolare un ordinamento 'List' allo stesso meccanismo. –

+5

In realtà questo non è un duplicato; è una domanda razionale, non una domanda su come fare. Gli array ammettono il facile ordinamento parallelo perché possono essere facilmente partizionati in blocchi che i thread possono lavorare indipendentemente con le caratteristiche prestazionali conosciute per l'accesso ai dati, quindi sappiamo che l'ordinamento parallelo sul posto è effettivamente pratico. Per List, non abbiamo tali garanzie che l'ordinamento parallelo sul posto sarà pratico. –

risposta

2

A List non consente necessariamente l'implementazione efficiente degli stessi algoritmi di ordinamento parallelo di un array. Potresti essere in grado di applicarlo direttamente a un ArrayList, ma molto probabilmente non a un LinkedList, a causa della sua mancanza di un accesso casuale efficiente. Esistono efficienti algoritmi di ordinamento multi-thread per quel tipo di elenco, ma sono diversi da un elenco di accesso casuale.

E, infatti, l'implementazione thread-safe dell'interfaccia List potrebbe non supportare affatto l'ordinamento multi-threaded esterno efficiente, a causa della sincronizzazione. Fornire un algoritmo di ordinamento generico per quelli sarebbe impossibile, e in effetti un algoritmo parallelo potrebbe essere più lento su di essi di un algoritmo sequenziale.

Problemi correlati