Java Collections.reverseOrder()与实例

Java Collections.reverseOrder()与实例

集合类的reverseOrder()方法本身就存在于java.util包中,它返回一个比较器,使用这个比较器我们可以对集合进行反向排序。自然排序是由对象自身的compareTo方法强加的排序。

语法

public static  Comparator reverseOrder()
Java

参数: 一个比较器,其排序将被返回的比较器反转(也可以是空)。

返回类型: 一个比较器,它对实现了Comparable接口的对象集合施加了自然排序的反向。

现在,为了更深入地了解基层,我们将涵盖不同的用例,如下所示。

  1. 对一个列表进行降序排序
  2. 对一个数组进行降序排序
  3. 当有一个用户定义的比较器做反向时,要对学生的卷数进行降序排序。

案例1: 对一个列表进行降序排序

例子

// Java Program to Demonstrate Working of reverseOrder()
// method of Collections class
// To sort a list in descending order
  
// Importing required utility classes
import java.util.*;
  
// Main class
// Collectionsorting
public class GFG {
  
    // Main driver method
    public static void main(String[] args)
    {
        // Creating a list of integers for which we
        // create an empty ArrayList by
        // declaring object of ArrayList class
        ArrayList<Integer> al = new ArrayList<Integer>();
  
        // Custom input integer elements
        al.add(30);
        al.add(20);
        al.add(10);
        al.add(40);
        al.add(50);
  
        // Using sort() method of Collections class to
        // sort the elements and passing list and using
        // reverseOrder() method to sort in descending order
        Collections.sort(al, Collections.reverseOrder());
  
        // Lastly printing the descending sorted list on
        // console
        System.out.println(
            "List after the use of Collection.reverseOrder()"
            + " and Collections.sort() :\n" + al);
    }
}
Java

输出

List after the use of Collection.reverseOrder() and Collections.sort() :
[50, 40, 30, 20, 10]
Java

注意: 极客们现在一定在想,我们可以使用 Arrays.sort()吗 ?

Arrays.sort()不能直接用于对原始数组进行降序排序。如果我们试图通过传递由Collections.reverseOrder()定义的反向比较器来调用Arrays.sort()方法,它将抛出如下所示的错误。

Java中的Collections.reverseOrder()与实例

提示 :但这对 “对象数组”(如 整数 数组)是有效的,但对原始数组(如int数组)则无效。

案例2: 对一个数组进行降序排序

例子

// Java Program to Demonstrate Working of reverseOrder()
// method of Collections class
// To Sort an Array in Descending Order
  
// Importing required utility classes
import java.util.*;
  
// Main class
// CollectionSorting
public class GFG {
  
    // Main driver method
    public static void main(String[] args)
    {
  
        // Creating an array to be sorted in descending
        // order
        Integer[] arr = { 30, 20, 40, 10 };
  
        // Collections.sort method is sorting the
        // elements of arr[] in descending order
        // later on Arrays.sort() is applied to sort array
        Arrays.sort(arr, Collections.reverseOrder());
  
        // Printing the sorted array on console
        System.out.println(
            "Array after the use of Collection.reverseOrder()"
            + " and Arrays.sort() :\n"
            + Arrays.toString(arr));
    }
}
Java

输出

Array after the use of Collection.reverseOrder() and Arrays.sort() :
[40, 30, 20, 10]
Java

案例3: 当有一个用户定义的比较器进行反向排序时,要按照卷号的降序对学生进行排序。

public static Comparator reverseOrder(Comparator c) 
Java

它返回一个比较器,对传递的比较器对象进行反向排序。我们可以使用这个方法以用户定义的比较器的反向顺序对一个列表进行排序。例如,在下面的程序中,我们创建了一个与用户定义的比较器相反的比较器,按照卷号的降序对学生进行排序。

例子

// Java Program to Demonstrate Working of
// reverseOrder(Comparator c)
// To sort students in descending order of roll numbers
// when there is a user defined comparator to do reverse
  
// Importing required classes
import java.io.*;
import java.lang.*;
import java.util.*;
  
// Class 1
// Helper student class
// to represent a student
class Student {
    int rollno;
    String name, address;
  
    // Constructor
    public Student(int rollno, String name, String address)
    {
  
        // This keyword refers to current instance itself
        this.rollno = rollno;
        this.name = name;
        this.address = address;
    }
  
    // Method of Student class
    // To print student details inside main() method
    public String toString()
    {
  
        return this.rollno + " " + this.name + " "
            + this.address;
    }
}
  
// Class 2
// Helper class implementing interface
class Sortbyroll implements Comparator<Student> {
  
    // Method
    // Used for sorting in ascending order of
    // roll number
    public int compare(Student a, Student b)
    {
        return a.rollno - b.rollno;
    }
}
  
// Class 3
// Main class
class GFG {
  
    // Main driver method
    public static void main(String[] args)
    {
  
        // Creating an empty ArrayList
        ArrayList<Student> ar = new ArrayList<Student>();
  
        // Adding custom attributes defined in Student class
        // using add() method
        ar.add(new Student(111, "bbbb", "london"));
        ar.add(new Student(131, "aaaa", "nyc"));
        ar.add(new Student(121, "cccc", "jaipur"));
  
        // Display message for better readability
        System.out.println("Unsorted");
  
        // Printing list of students
        for (int i = 0; i < ar.size(); i++)
            System.out.println(ar.get(i));
  
        // Sorting a list of students in descending order of
        // roll numbers using a Comparator
        // that is reverse of Sortbyroll()
        Comparator c
            = Collections.reverseOrder(new Sortbyroll());
        Collections.sort(ar, c);
  
        // Display message for better readability
        System.out.println("\nSorted by rollno");
  
        // Printing sorted students in descending order
        for (int i = 0; i < ar.size(); i++)
            System.out.println(ar.get(i));
    }
}
Java

输出

Unsorted
111 bbbb london
131 aaaa nyc
121 cccc jaipur

Sorted by rollno
131 aaaa nyc
121 cccc jaipur
111 bbbb london
Java

这里要记住的关键是上述程序使用了未经检查和不安全的操作。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册