【TreeSet】自然排序与比较器排序
程序员文章站
2022-07-09 22:35:26
...
1.自然排序
对象类:
public class Examinee implements Comparable{//实现接口
private int scorce;
//构造方法与get、set方法略
@Override
public String toString() {
return this.getScorce()+"";
}
/**
* 重写的compareTo方法
*/
@Override
public int compareTo(Examinee o) {
return o.getScorce() - this.getScorce();
}
}
测试类:
import java.util.TreeSet;
public class TreeSetTest {
public static void main(String[] args) {
//TreeSet自然排序
TreeSet ts = new TreeSet();
ts.add(new Examinee(66));
ts.add(new Examinee(93));
ts.add(new Examinee(52));
ts.add(new Examinee(75));
ts.add(new Examinee(83));
System.out.println(ts);//[93, 83, 75, 66, 52]
}
}
要点:使用TreeSet自然排序法时需要实现Comparable接口,并将泛型注为当前对象类,然后重写compareTo();方法。
关于compareTo方法的使用方法:
@override
public int compareTo(类名 形参){
return 形参.返回int类型的方法 - this.与前面相同的方法;
//从大到小排序。若从小到大只需交换减数与被减数
}
2.比较器排序
对象类:
public class Examinee{//不实现接口
private int scorce;
//构造方法与get、set方法略
@Override
public String toString() {
return this.getScorce()+"";
}
/**
* 不在此重写compareTo方法。适用于不允许修改,无法实现Comparable接口的类
*/
}
测试类:
import java.util.Comparator;
import java.util.TreeSet;
public class TreeSetTest {
public static void main(String[] args) {
//TreeSet比较器排序
TreeSet ts = new TreeSet(new Comparator() {
//使用匿名内部类
@Override
public int compare(Examinee o1, Examinee o2) {
return o1.getScorce() - o2.getScorce();
}
});
ts.add(new Examinee(66));
ts.add(new Examinee(93));
ts.add(new Examinee(52));
ts.add(new Examinee(75));
ts.add(new Examinee(83));
System.out.println(ts);//[52, 66, 75, 83, 93]
}
}
要点:使用TreeSet比较器排序法时不需要实现Comparable接口,只在新建TreeSet时使用匿名内部类重写compareTo方法即可。当对象类为Java内部类或其他没有修改权限的类时可以使用此方法。效果与自然排序相同。在重写compareTo方法时要注意两个形参属性相减的顺序。
上一篇: 学习博客:TreeSet的比较器排序