Comparable是排序接口,若一个类实现了Comparable接口,就意味着“该类支持排序”。而Comparator是比较器,我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。<br /> Comparable相当于“内部比较器”,而Comparator相当于“外部比较器”。<br />sort(List list, Comparator c):根据指定比较器产生的顺序对指定列表进行排序,也就是自定义排序,第一个参数是传入的要排序的列表,第二个参数是指定的比较器。<br />例如:将list列表按降序进行排序,代码如下:
首先创建一个比较器,在这个比较器中定义好排序规则(升序或降序),此处为降序排序:
Comparator<Integer> c = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
// 升序排序 o1 - o2
// 降序排序 o2 - o1
return o2 - o1;
}
};
然后将这个比较器作为一个参数传递进sort方法:
Collections.sort(list, c);
System.out.println("sort降序排序:" + list);
输出结果如下:
图3
也可以直接在调用sort方法时创建比较器
,代码如下:
Collections.sort(list, new Comparator<Integer>() {//直接在调用sort方法时创建比较器
@Override
public int compare(Integer o1, Integer o2) {
// 升序排序 o1 - o2
// 降序排序 o2 - o1
return o2 - o1;
}
});
只是写法不同,输出结果一致,如图3所示!
原文链接:https://blog.csdn.net/weixin_44578554/article/details/89362331
排序方式
Comparator中的compare方法
正序排列 从小到大
public int compare(int o1, int o2) {
return o1 - o2;
}
逆序排列 从大到小
public int compare(int o1, int o2) {
return o2-o1;;
}
Comparable中的compareTo方法
正序排列 从小到大
@Override
public int compareTo(Test o) {
return this.i - o.i;
逆序排列 从大到小
@Override
public int compareTo(Test o) {
return o.i-this.i ;
Comparable接口的comparaTo方法和上面Comparator接口的compare方法类似,这里的this即上面的o1,o即上面的o2
原文链接:https://blog.csdn.net/qq_43170213/article/details/89388427
强制转换
Student s1 = (Student)o1; //强制转换,使得o1转换成Student类并可以使用方法变量
public class Studentdemo {
public static void main(String[] args) {
TreeSet ts1 = new TreeSet(
new Comparator() {
public int compare(Object o1,Object o2) {
Student s1 = (Student)o1; //强制转换,使得o1转换成Student类并可以使用方法变量
Student s2 = (Student)o2;
return s1.age > s2.age ? 1 : -1;
}
});
原文链接:https://blog.csdn.net/wuya112709/article/details/51407754/