如何在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]