Java 按降序对基本类型的数组进行排序

我有一个很大的原始类型数组(double)。如何按降序排列元素?

不幸的是,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;

}

这种方法也很慢 -特别是在数组已经很好排序的情况下。

有什么更好的选择?

回答:

Java Primitive包含用于基于自定义比较器对基本数组进行排序的功能。使用它和Java 8,你的示例可以编写为:

double[] array = new double[1048576];

...

Primitive.sort(array, (d1, d2) -> Double.compare(d2, d1), false);

如果你使用的是Maven,则可以将其包含在:

<dependency>

<groupId>net.mintern</groupId>

<artifactId>primitive</artifactId>

<version>1.2.1</version>

</dependency>

当你将false第三个参数传递给时sort,它将使用不稳定的排序,这是Java内置的double-pivot quicksort的简单编辑。这意味着速度应接近内置分拣的速度。

以上是 Java 按降序对基本类型的数组进行排序 的全部内容, 来源链接: utcz.com/qa/431827.html

回到顶部