首页 文章

Java数组排序下降?

提问于
浏览
229

是否有任何简单的方法按降序对数组进行排序,就像它们在Arrays class中按升序排序一样?

或者我必须停止懒惰并自己这样做:[

14 回答

  • 2

    您可以使用它来排序所有类型的对象

    sort(T[] a, Comparator<? super T> c) 
    
    Arrays.sort(a, Collections.reverseOrder());
    

    Arrays.sort() 不能直接用于按降序对原始数组进行排序 . 如果您尝试通过传递 Collection.reverseOrder() 定义的反向比较器来调用 Arrays.sort() 方法,则会抛出错误

    找不到合适的排序方法(int [],比较器)

    这将适用于Integer数组,但不适用于int数组 .

    按降序对基本数组进行排序的唯一方法是,首先按升序对数组进行排序,然后将数组反转到位 . 对于二维原始数组也是如此 .

  • 43

    你可以用这个:

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

    Collections.reverseOrder() 使用逆自然顺序返回 Comparator . 您可以使用 Collections.reverseOrder(myComparator) 获得自己的比较器的反转版本 .

  • 0

    列表

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

    对于一个数组

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

    没有明确的比较:

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

    用明确的比较器:

    Collections.sort(list, Collections.reverseOrder(new Comparator()));
    
  • 3

    另一种选择可能是(数字!!!)

    • 将数组乘以-1

    • 排序

    • 再次乘以-1

    直译:

    array = -Arrays.sort(-array)
    
  • 272

    Java 8:

    Arrays.sort(list, comparator.reversed());
    

    更新: reversed() 反转指定的比较器 . 通常,比较器按升序排序,因此这会将顺序更改为降序 .

  • 0

    对于包含基元元素的数组,如果有 org.apache.commons.lang(3) 处理方便反向数组(在排序后)使用:

    ArrayUtils.reverse(array);
    
  • 88

    我不知道你的用例是什么,但是除了其他答案之外,另一个(懒惰)选项仍然是按照你指示的升序排序,而是以相反的顺序迭代 .

  • 2

    首先,您需要使用以下方法对数组进

    Collections.sort(Myarray);
    

    然后,您需要使用以下命令将顺序从升序转换为降序:

    Collections.reverse(Myarray);
    
  • 6

    Another 解决方案是,如果您正在使用Comparable接口,则可以切换您在compareTo中指定的输出值(Object bCompared) .

    例如 :

    public int compareTo(freq arg0) 
    {
        int ret=0;
        if(this.magnitude>arg0.magnitude)
            ret= 1;
        else if (this.magnitude==arg0.magnitude)
            ret= 0;
        else if (this.magnitude<arg0.magnitude)
            ret= -1;
        return ret;
    }
    

    magnitude 是我程序中数据类型为double的属性 . 这是按照它的大小以相反的顺序对我定义的类freq进行排序 . 因此,为了纠正这个问题,您可以切换 <> 返回的值 . 这为您提供以下内容:

    public int compareTo(freq arg0) 
    {
        int ret=0;
        if(this.magnitude>arg0.magnitude)
            ret= -1;
        else if (this.magnitude==arg0.magnitude)
            ret= 0;
        else if (this.magnitude<arg0.magnitude)
            ret= 1;
        return ret;
    }
    

    要使用此compareTo,我们只需调用 Arrays.sort(mFreq) ,它将为您提供已排序的数组 freq [] mFreq .

    这个解决方案的优点(在我看来)可以用来对用户定义的类进行排序,甚至可以用特定的属性对它们进行排序 . 如果Comparable接口的实现对你来说听起来令人生畏,那么我就是这样了 . 这对我来说更容易 . 希望人们可以利用这个解决方案,你的喜悦甚至可以与我的相媲美 .

  • 1
    array.sort(function(a, b) {return b - a;}); //descending
    

    要么

    array.sort(function(a, b) {return a - b;}); //ascending
    
  • 81

    我知道这是一个非常古老的线程,但这里是Integers和Java 8的更新版本:

    Arrays.sort(array, (o1, o2) -> o2 - o1);
    

    请注意,正常升序(或Comparator.comparingInt())为“o1 - o2” .

    这也适用于任何其他类型的对象 . 说:

    Arrays.sort(array, (o1, o2) -> o2.getValue() - o1.getValue());
    
  • 4

    这对我有用:

    package doublearraysort;
    
    import java.util.Arrays;
    import java.util.Collections;
    
    public class Gpa {
    
    
        public static void main(String[] args) {
            // initializing unsorted double array
            Double[] dArr = new Double[] {                 
                new Double(3.2),
                new Double(1.2),
                new Double(4.7),
                new Double(3.3),
                new Double(4.6),
               };
            // print all the elements available in list
            for (double number : dArr) {
                System.out.println("GPA = " + number);
            }
    
            // sorting the array
            Arrays.sort(dArr, Collections.reverseOrder());
    
            // print all the elements available in list again
            System.out.println("The sorted GPA Scores are:");
            for (double number : dArr) {
                System.out.println("GPA = " + number);
            }
        }
    }
    

    输出:

    GPA = 3.2
    GPA = 1.2
    GPA = 4.7
    GPA = 3.3
    GPA = 4.6
    The sorted GPA Scores are:
    GPA = 4.7
    GPA = 4.6
    GPA = 3.3
    GPA = 3.2
    GPA = 1.2
    
  • 0
    public double[] sortArrayAlgorithm(double[] array) { //sort in descending order
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array.length; j++) {
                if (array[i] >= array[j]) {
                    double x = array[i];
                    array[i] = array[j];
                    array[j] = x;
                }
            }
        }
        return array;
    }
    

    只需使用此方法按降序对double类型的数组进行排序,只需更改“返回类型”,“参数类型”,即可使用它对任何其他类型的数组(如int,float等)进行排序 . 变量“x”类型为相应的类型 . 您还可以在if条件中将“> =”更改为“<=”以使订单升序 .

相关问题