【TreeSet】自然排序与比较器排序

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方法时要注意两个形参属性相减的顺序。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值