Arrays.sort从更高的数字到更低的数字?

时间:2014-01-06 19:12:45

标签: java arrays sorting

基本上我想使用“Arrays.Sort”将我的数组从更高的humbers 排序到 lowe numbers 。遗憾的是,虽然我不知道如何从高到低对它进行排序,因为“Arrays.sort”将这些数组从低到高排序。

有什么建议吗?

代码:

    double sortArrays[] = {
        (float) probabilityOfFlush,
        (float) probabilityOfFullHouse,
        (float) probabilityOfOnePair,
        (float) probabilityOfPoker,
        (float) probabilityOfRoad,
        (float) probabilityOfRoyalFlush,
        (float) probabilityOfTriple,
        (float) probabilityOfTwoPairs
    };

    Arrays.sort (sortArrays);
    System.out.println(Arrays.toString(sortArrays));

嗯,输出就像这样一个例子:

  

[0.0,0.18018017709255219,0.36036035418510437,2.33423423767089844,2.882882833480835,2.882882833480835,4.504504680633545,45.76576614379883]

4 个答案:

答案 0 :(得分:4)

Arrays.sort(array,Collections.reverseOrder());

正如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 sortArrays[]更改为Double[] sortArrays

  • []的位置变化没有区别,但这是编码风格/偏好的问题。
  • 然而,Double中的大写字母D确实存在。此大写D使用Double对象类型而不是double基元类型。

您还需要将import java.util.Collections;添加到类文件的顶部。既然你提到你正在使用eclipse,你可以按住ctrl + shift并按o以通过导入未排序的类,删除未使用的导入以及按包组织导入来自动处理你的导入。

答案 1 :(得分:2)

列表

Collections.sort(list ,Collections.reverseOrder());

对于数组

Arrays.sort(array, Collections.reverseOrder());

Collections.reverseOrder()使用比较器反转自然顺序。

注意:它无法对基元数组进行排序,因此您需要将基元转换为各自的对象。 int的整数,double的double,布尔的布尔值等等。

使用示例

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]

答案 2 :(得分:1)

如果要保留基元,可以对数组进行排序,然后将其反转。请注意,您必须使用apache library。这将在O(nlogn)

中运行
Arrays.sort(array);
ArrayUtils.reverse(array);

如果您不想使用exernal库,可以使用代码:

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++;
            }
 }

答案 3 :(得分:0)

我建议使用比较器

Arrays.sort(array, new Comparator<Double>()
{
    @Override
    public int compare(Double x, Double y)
    {
        return y - x;
    }
});

使用带y-x的比较器将从最高到最低排序,x - y将从最低到最高排序。