Java中的Collections.reverseOrder()及其示例

Java中的Collections.reverseOrder()及其示例

Collections类本身就在java.util包中,reverseOrder()方法返回一个比较器,我们可以使用它来反转Collection的顺序。自然排序是对象自己的compareTo方法所强制的排序。

语法:

public static Comparator reverseOrder()

参数: 要通过返回的比较器反转其排序的比较器(也可以为null)

返回类型: 该比较器会将实现Comparable接口的对象集合反向排序的自然排序反向排序。

现在,为了更深入地理解基本原理,我们将涵盖以下不同的用例 s:

  1. 对列表按降序排序
  2. 对数组按降序排序
  3. 在存在用户定义的比较器以进行反向排序时,按降序对学生进行卷号排序。

用例1: 对列表按降序排序

示例

// Java程序演示Collections类的reverseOrder()方法的工作
// 对列表按降序排序
//导入所需的实用程序类
import java.util.*;
//主类Collectionsorting
public class GFG {
//主驱动程序方法
public static void main(String[] args) {
//为其创建一个空ArrayList对象的整数列表
ArrayList al=new ArrayList();
//自定义输入整数元素
al.add(30);
al.add(20);
al.add(10);
al.add(40);
al.add(50);
//使用Collections类的sort()方法对元素进行排序,传递列表并使用reverseOrder()方法按降序排序
Collections.sort(al, Collections.reverseOrder());
//最后在控制台上打印降序排序的列表
System.out.println("Collection.reverseOrder()和Collections.sort()使用后的列表:\n" + al);
}
}

输出

Collection.reverseOrder()和Collections.sort()使用后的列表:
[50,40,30,20,10]

注意: Geeks,现在您一定在想我们是否可以使用Arrays.sort()?

无法直接使用Arrays.sort()按降序排序原始数组。如果我们试图通过传递由Collections.reverseOrder()定义的反向比较器来调用Arrays.sort()方法,它将引发以下错误:

Java中的Collections.reverseOrder()及其示例

提示: 但这对“对象数组”(例如Integer数组)可以正常工作,但对原始数组(例如int数组)无效。

用例2: 对数组进行降序排序

示例

// Java程序展示了Collections类中reverseOrder()方法的工作方式
// 用于按降序排序数组
  
// 导入所需的实用类
import java.util.*;
  
// 主类
// CollectionSorting
public class GFG {
  
    // 主方法
    public static void main(String[] args)
    {
  
        // 创建要按降序排序的数组
        Integer[] arr = { 30, 20, 40, 10 };
  
        // Collections.sort方法按降序排序arr[]的元素
        // 然后使用Arrays.sort()对数组进行排序
        Arrays.sort(arr, Collections.reverseOrder());
  
        // 在控制台上打印排序后的数组
        System.out.println(
            "Array after the use of Collection.reverseOrder()"
            + "and Arrays.sort() :\n"
            + Arrays.toString(arr));
    }
}

输出

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

情况3: 当存在用户定义的比较器进行反向操作时,按照学生的学号降序排列。

public static Comparator reverseOrder(Comparator c)

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

示例:

// Java程序演示了
// reverseOrder(Comparator c)的使用方式
// 当使用用户定义的比较器进行排序并按卷号降序排列学生时
  
// 导入所需的类
import java.io.*;
import java.lang.*;
import java.util.*;
  
// 第1类
// 帮助类,表示一个学生
class Student {
    int rollno;
    String name, address;
  
    // 构造函数
    public Student(int rollno, String name, String address)
    {
  
        // This指当前实例本身
        this.rollno = rollno;
        this.name = name;
        this.address = address;
    }
  
    // 学生类的方法
    // 在main()方法中打印学生详细信息
    public String toString()
    {
  
        return this.rollno + " " + this.name + " "
            + this.address;
    }
}
  
// 第2类
// 实现接口的帮助类
class Sortbyroll implements Comparator<Student> {
  
    // 方法
    // 用于卷号升序排序
    public int compare(Student a, Student b)
    {
        return a.rollno - b.rollno;
    }
}
  
// 第3类
// 主类
class GFG {
  
    // 主驱动程序
    public static void main(String[] args)
    {
  
        // 创建一个空的ArrayList
        ArrayList<Student> ar = new ArrayList<Student>();
  
        // 使用add()方法添加在Student类中定义的自定义属性
        ar.add(new Student(111, "bbbb", "london"));
        ar.add(new Student(131, "aaaa", "nyc"));
        ar.add(new Student(121, "cccc", "jaipur"));
  
        // 显示消息以提高可读性
        System.out.println("Unsorted");
  
        // 打印学生列表
        for (int i = 0; i < ar.size(); i++)
            System.out.println(ar.get(i));
  
        // 使用与Sortbyroll()相反的比较器按卷号降序排序学生列表
        Comparator c
            = Collections.reverseOrder(new Sortbyroll());
        Collections.sort(ar, c);
  
        // 显示消息以提高可读性
        System.out.println("\nSorted by rollno");
  
        // 按卷号降序打印已排序学生
        for (int i = 0; i < ar.size(); i++)
            System.out.println(ar.get(i));
    }
}

输出:

Unsorted
111 bbbb london
131 aaaa nyc
121 cccc jaipur

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

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程