按降序对基元类型数组进行排序
我有大量的基元类型(双精度)。如何按降序对元素进行排序?
不幸的是,Java API不支持使用比较器对基元类型进行排序。
可能想到的第一种方法是将其转换为对象列表(装箱):
double[] array = new double[1048576];
Arrays.stream(array).boxed().sorted(Collections.reverseOrder())…
但是,对数组中的每个基元进行装箱太慢,并且会造成很大的GC压力!
另一种方法是排序,然后反转:
double[] array = new double[1048576];
...
Arrays.sort(array);
// reverse the array
for (int i = 0; i < array.length / 2; i++) {
// swap the elements
double temp = array[i];
array[i] = array[array.length - (i + 1)];
array[array.length - (i + 1)] = temp;
}
这种方法也很慢 - 特别是如果数组已经很好地排序。
什么是更好的选择?