欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【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