Java Collections.reverseOrder()与实例
集合类的reverseOrder()方法本身就存在于java.util包中,它返回一个比较器,使用这个比较器我们可以对集合进行反向排序。自然排序是由对象自身的compareTo方法强加的排序。
语法
public static Comparator reverseOrder()
Java
参数: 一个比较器,其排序将被返回的比较器反转(也可以是空)。
返回类型: 一个比较器,它对实现了Comparable接口的对象集合施加了自然排序的反向。
现在,为了更深入地了解基层,我们将涵盖不同的用例,如下所示。
- 对一个列表进行降序排序
- 对一个数组进行降序排序
- 当有一个用户定义的比较器做反向时,要对学生的卷数进行降序排序。
案例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()方法,它将抛出如下所示的错误。
提示 :但这对 “对象数组”(如 整数 数组)是有效的,但对原始数组(如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
这里要记住的关键是上述程序使用了未经检查和不安全的操作。