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.
'list.parallelStream(). Sorted(). Collect (...)'? –
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. –
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. –