如何在Java中对Collection对象进行排序?
排序集合的对象
这个概念与排序有关,在这里我们将看到如何对Collection上的对象进行排序?
在Java中,我们有实用程序类Collections,它提供了执行各种任务的各种方法,并且Collection类的方法之一与sort有关sort()
。
我们可以通过两种方式对Collection对象实施排序:
通过使用可比
通过使用比较器
当我们调用Collections.sort()时。它根据compareTo()
方法中指定的自然排序或默认排序(即升序)对对象进行排序。
当我们调用Collections.sort(Comparator)时。它根据在compare()
Comparator方法中指定的自定义排序(即升序或降序)对对象进行排序。
我们将一一看到排序方式...
1)通过使用比较器
如果我们在Collection类构造函数中传递Comparator对象,compare()
则将执行我们的方法。
当我们想要自定义排序时,我们应该选择比较器。
使用Comparator接口可以实现自定义排序。(自定义排序意味着根据我们的需要是升序还是降序)。
示例
import java.util.*; class TreeSetClass { public static void main(String[] args) { //中传递Comparator对象 //定制排序的类构造器 TreeSet ts = new TreeSet(new CustomizeSorting()); //将元素添加到TreeSet- ts.add(10); ts.add(40); ts.add(30); ts.add(20); //自定义排序列表 System.out.println("Customize sorting :" + ts); } } //这里我们正在实现Comparator接口 class CustomizeSorting implements Comparator { //这是compare()比较器的叠加方法 public int compare(Object obj1, Object obj2) { Integer i1 = (Integer) obj1; Integer i2 = (Integer) obj2; return -i1.compareTo(i2); } }
输出结果
E:\Programs>javac TreeSetClass.java E:\Programs>java TreeSetClass Customize sorting :[40, 30, 20, 10]
2)使用可比接口
对于预定义的可比较类,默认的自然排序已可用。
对于预定义的不可比较类,默认自然排序尚不可用。
为了让我们的自定义类定义自然排序,我们应该选择Comparable。
在默认情况下,自然排序强制对象应该是同质且可比较的,否则我们将获得CCE(ClassCastException)。
示例
import java.util.*; class TreeSetClass { public static void main(String[] args) { Student s1 = new Student(10); Student s2 = new Student(30); Student s3 = new Student(70); Student s4 = new Student(20); //传递Comparator对象 //用于默认排序的类构造函数 TreeSet ts = new TreeSet(); //将元素添加到TreeSet- ts.add(s1); ts.add(s2); ts.add(s3); ts.add(s4); //自定义排序列表 System.out.println("Default sorting :" + ts); } } //这里我们正在实现Comparable接口 class Student implements Comparable { int code; Student(int code) { this.code = code; } public String toString() { return " Code - " + code; } //这里我们是compare()Comparable接口的覆盖方法 public int compareTo(Object obj) { int code1 = this.code; Student intermediate = (Student) obj; int code2 = intermediate.code; if (code1 < code2) return -1; else if (code1 > code2) return +1; else return 0; } }
输出结果
E:\Programs>javac TreeSetClass.java E:\Programs>java TreeSetClass Default sorting :[ Code - 10, Code - 20, Code - 30, Code - 70]