我有大量的原始类型(双)。如何按降序对元素进行排序?
不幸的是,Java API 不支持使用 Comparator 对原始类型进行排序。
可能想到的第一种方法是将其转换为对象列表(装箱):
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;
}
这种方法也很慢- 特别是如果数组已经排序得很好。
有什么更好的选择?