【问题标题】:Arrays.sort from higher number to lower number? [duplicate]Arrays.sort 从较高的数字到较低的数字? [复制]
【发布时间】:2014-01-06 19:12:45
【问题描述】:

基本上,我想使用“Arrays.Sort”将我的数组从 higher 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.3423423767089844,2.882882833480835,2.882882833480835,4.504504680633545,45.76576614379883] P>

【问题讨论】:

  • 查看重载的sort 方法。您需要使用 Double 数组。
  • 你可以实现比较器
  • 为什么这个标签是eclipse
  • @Aroon 我会使用我的ReverseComparatorComparableComparator
  • 您可以转到Collection 并使用Collections.reverse()

标签: java arrays sorting


【解决方案1】:
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,但是您可以添加 Sotirios 在 cmets 中指出的内容,因为 OP 有一个 double[] 而不是 Double[]
  • @BheshGurung 不错,没注意到。
  • 你能给我一个我在帖子中写的代码的例子吗?可悲的是它对我不起作用:S。还是谢谢你!
  • @user3077388 当然,给我几分钟。
  • @user3077388 没问题,很高兴为您提供帮助!
【解决方案2】:

列表

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

对于一个数组

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

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

注意:它不能对原始数组进行排序,因此您需要将原始数组转换为它们各自的对象。 Integer for int,Double for double,Boolean for boolean 等

使用示例

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]

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 我可以用这个,但是turbo的代码似乎更容易!不过还是谢谢你!
    • @user3077388 这个解决方案需要 2 行代码:P 并且您正在处理原始代码。
    • 好吧,你知道我很笨,我应该接受这个,因为它很简单,而且它可以解释自己......
    【解决方案4】:

    我建议使用比较器

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-21
      相关资源
      最近更新 更多