Java 8 предоставляет java.util.Arrays.parallelSort
, который сортирует массивы параллельно с использованием инфраструктуры fork-join. Но для сортировки списков нет соответствующих Collections.parallelSort
.
Я могу использовать toArray
, сортировать этот массив и сохранять результат в моем списке, но это временно увеличит использование памяти, что, если я использую параллельную сортировку, уже высок, потому что параллельная сортировка только окупается для огромных списки. Вместо двойной памяти (список плюс рабочая память parallelSort) я использую трижды (список, временный массив и рабочая память parallelSort). (Документация Arrays.parallelSort гласит: "Алгоритм требует рабочего пространства, не превышающего размер исходного массива".)
Использование памяти в стороне, Collections.parallelSort также было бы более удобным для того, что кажется достаточно распространенной операцией. (Я стараюсь не использовать массивы напрямую, поэтому я бы, конечно, использовал его чаще, чем Arrays.parallelSort.)
Библиотека может протестировать RandomAccess, чтобы избежать попыток, например. quicksort связанный список, так что не может быть причиной преднамеренного упущения.
Как сортировать список параллельно, не создавая временный массив?