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

我有很多原始类型(双精度)。如何按降序对元素进行排序?


不幸的是,Java API不支持使用Comparator对基本类型进行排序。


一种解决方法是排序,然后反转:


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;

}

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


有什么更好的选择?



慕丝7291255
浏览 254回答 3
3回答

守着星空守着你

Guava具有将原始数组转换为包装类型列表的方法。令人高兴的是,这些列表是实时视图,因此对它们的操作也可以在基础数组上进行(类似于Arrays.asList(),但对于基元)。无论如何,这些列表中的每一个都可以传递给Collections.reverse():int[] intArr = { 1, 2, 3, 4, 5 };float[] floatArr = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };double[] doubleArr = { 1.0d, 2.0d, 3.0d, 4.0d, 5.0d };byte[] byteArr = { 1, 2, 3, 4, 5 };short[] shortArr = { 1, 2, 3, 4, 5 };Collections.reverse(Ints.asList(intArr));Collections.reverse(Floats.asList(floatArr));Collections.reverse(Doubles.asList(doubleArr));Collections.reverse(Bytes.asList(byteArr));Collections.reverse(Shorts.asList(shortArr));System.out.println(Arrays.toString(intArr));System.out.println(Arrays.toString(floatArr));System.out.println(Arrays.toString(doubleArr));System.out.println(Arrays.toString(byteArr));System.out.println(Arrays.toString(shortArr));输出:并[5,4,3,2,1][5.0,4.0,3.0,2.0,1.0][5.0,4.0,3.0,2.0,1.0][5,4,3,2,1][5,4,3 ,2,1]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java