Подтвердить что ты не робот

Java: сортировка ArrayList на месте

В стандартной библиотеке Java существует ли метод, позволяющий сортировать ArrayList на месте, т.е. используя O(1) дополнительное хранилище?

Collections.sort(List<T>) не выполняет это требование, так как он

удаляет указанный список в массив, сортирует массив и выполняет итерацию по списку, сбросив каждый элемент из соответствующей позиции в массиве.

Если в стандартной библиотеке нет ничего, какие сторонние библиотеки могут быть использованы для этого?

4b9b3361

Ответ 1

Вы можете извлечь базовый массив (например, отражение) и выполнить на нем массив Arrays.sort(массив, 0, list.size()).

Java 7 не копирует массив в Arrays.sort() перед сортировкой массива. В Java 6 это означает, что Collections.sort() в Java 6 фактически копирует базовый массив TWICE для выполнения сортировки.

Ответ 2

Collections.sort() был создан для работы с любой реализацией List и почему он не работает на месте (слияние LinkedList на месте сложно и жертвует стабильностью).

Если вы действительно обеспокоены сортировкой на месте, вам придется развернуть свою собственную функцию сортировки. Это не стоит вашего времени, если ваш список очень длинный.

Arrays.sort(Object[]) выполняет одно и то же объединение и вызывается внутри Collections.sort() (по крайней мере, в openjdk)

Ответ 3

Просто, нет. Collections.sort() был создан для сортировки, кажется, что вы должны реализовать свои собственные. Для списков я бы использовал Bubblesort, потому что он просто обменивает два соседних элемента, что можно сделать очень просто без изменения ковшей.