Java 数组。是否从较高的数字排序到较低的数字?
基本上,我想使用“arrays.sort”对数组进行排序,从较高的亨伯数到较低的数。遗憾的是,我不知道如何从高到低排序,因为“Arrays.sort”将这些数组从低到高排序 有什么建议吗 代码: 例如,输出如下: [0.0,0.18018017709255219,0.36036035418510437,2.342342376708944,2.88288348034835,2.8828834808034835,4.504504683545,45.76576614379883] 正如Bhesh在下面指出的,您需要使用Java 数组。是否从较高的数字排序到较低的数字?,java,arrays,sorting,Java,Arrays,Sorting,基本上,我想使用“arrays.sort”对数组进行排序,从较高的亨伯数到较低的数。遗憾的是,我不知道如何从高到低排序,因为“Arrays.sort”将这些数组从低到高排序 有什么建议吗 代码: 例如,输出如下: [0.0,0.18018017709255219,0.36036035418510437,2.342342376708944,2.88288348034835,2.8828834808034835,4.504504683545,45.76576614379883] 正如Bhesh在下面
Double[]
数组,而不是Double[]
,因为这不适用于基本类型
直接应用于您的代码:
Double[] sortArrays = {
(Double) probabilityOfFlush,
(Double) probabilityOfFullHouse,
(Double) probabilityOfOnePair,
(Double) probabilityOfPoker,
(Double) probabilityOfRoad,
(Double) probabilityOfRoyalFlush,
(Double) probabilityOfTriple,
(Double) probabilityOfTwoPairs
};
Arrays.sort(sortArrays, Collections.reverseOrder());
System.out.println(Arrays.toString(sortArrays));
我将double-sortarray[]
更改为double-sortarray[/code>:
- []位置的改变没有什么区别,但这是编码风格/偏好的问题李>
- 但是,
Double
中的大写字母D不起作用。大写字母D使用Double
对象类型,而不是Double
原语类型李>
您还需要添加import java.util.Collections代码>到类文件的顶部。因为您提到您正在使用eclipse,所以可以按住ctrl+shift并按o键,通过导入未导入的类、删除未使用的导入以及按包组织导入来自动处理导入。获取列表
Collections.sort(list ,Collections.reverseOrder());
对于数组
Arrays.sort(array, Collections.reverseOrder());
Collections.reverseOrder()
使用比较器反转自然顺序
注意:它无法对基本体数组进行排序,因此需要将基本体转换为它们各自的对象。整数表示整数,双精度表示双精度,布尔值表示布尔值,等等
用法示例
Double sortArrays[] = new Double[]{1.0,2.0,3.0,5.0,6.0};
Arrays.sort(sortArrays, Collections.reverseOrder());
System.out.println(Arrays.toString(sortArrays));
//output [6.0, 5.0, 3.0, 2.0, 1.0]
我建议使用比较器
Arrays.sort(array, new Comparator<Double>()
{
@Override
public int compare(Double x, Double y)
{
return y - x;
}
});
Arrays.sort(数组,新比较器()
{
@凌驾
公共整数比较(双x,双y)
{
返回y-x;
}
});
使用带有y-x的比较器将从高到低排序,x-y将从低到高排序。如果要保留原语,可以对数组进行排序,然后将其反转。请注意,您必须使用。这将在O(nlogn)
如果不想使用外部库,可以使用以下代码:
public static void reverse(double[] array) {
if (array == null) {
return;
}
int i = 0;
int j = array.length - 1;
double tmp;
while (j > i) {
tmp = array[j];
array[j] = array[i];
array[i] = tmp;
j--;
i++;
}
}
检查重载的sort
方法。你需要使用一个Double
数组。你可以实现比较器,为什么要标记它?@Aroon我会使用我的and。你可以移动到集合
并使用Collections.reverse()
+1,但你可以添加Sotirios在注释中指出的内容,因为OP有一个Double[]
而不是Double[]
@BheshGurung很好,没注意到。你能给我一个我在帖子中写的代码的例子吗?遗憾的是,这对我不起作用:S。无论如何,谢谢你@user3077388当然可以,给我几分钟。@user3077388没问题,很乐意帮忙!我本可以用这个,但是turbo seemd的代码更简单!不过还是要谢谢你@user3077388此解决方案需要两行代码:P,您正在处理primitive。您知道我的缺点,我应该采用此解决方案,因为它很简单,并且可以解释它本身。。。
Arrays.sort(array, new Comparator<Double>()
{
@Override
public int compare(Double x, Double y)
{
return y - x;
}
});
Arrays.sort(array);
ArrayUtils.reverse(array);
public static void reverse(double[] array) {
if (array == null) {
return;
}
int i = 0;
int j = array.length - 1;
double tmp;
while (j > i) {
tmp = array[j];
array[j] = array[i];
array[i] = tmp;
j--;
i++;
}
}