【发布时间】:2010-09-17 22:24:50
【问题描述】:
我有一个 大 原始类型(双精度)数组。 如何按降序对元素进行排序?
不幸的是,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;
}
这种方法也很慢 - 特别是如果数组已经很好地排序了。
有什么更好的选择?
【问题讨论】: