Comparable与Comparator的使用

Comparable与Comparator都可以对引用类型进行比较,它们的使用方式不同
Comparable使用:需要进行比较的引用类实现这个接口,重写Comparable中的compareTo方法

public class Employee{
	private String name;
	private int age;
	private double sal;
	@Override
	public int compareTo(Object o){    //重写compareTo方法,规定按照年龄升序排序
		if(o instance Employee){
			Employee e = (Employee)o;
			if(this.age >e.age){
				return 1;
			}else if(this.age == e.age){
				return 0;
			}else if(this.age < e.age){
				return -1;
			}
		}
		return 0;
	}
}

//main方法
public static void main(String [] args){
	Employee [] employees = {employee1,employee2,employee3};
	System.out.println(Arrays.sort(employees));
}

Comparator使用:Comparator也是接口,但它的使用 通过匿名内部类的方式重写compare方法:int compare(T o1,T o2);
当o1>o2时,返回1(或者说一个大于0 的数),o1 == o2 时返回0,o1<o2 时 返回-1,此时默认升序排列对象;
当o1>o2时,返回-1(或者说一个大于0 的数),o1 == o2 时返回0,o1<o2 时 返回1,此时默认降序排列对象;

demo:

public class Employee{
	private String name;
	private int age;
	private double sal;
	...
}
public  Employee[]  sortDesc(Employee[]  employees){
    Comparator<Employee>  com=new  Comparator<Employee>(){
        @Override
        public  int  compare(Employee  o1,Employee  o2){  //规定按照工资降序
            if(o1.getSal()<o2.getSal()){
                return  1;
            }else  if(o1.getSal()>o2.getSal()){
                return  -1;
            }
            return  0;
        }
    };
    Arrays.sort(employees,com);//在这里直接调用sort方法
    return  employees;
}

练习:

public class Test01 {
    public static void main(String[] args) {
        //1)定义TreeSet存储String字符串, 在构造方法中指定Comparator比较器,根据字符串降序排序
        TreeSet<String > treeSet = new TreeSet<>(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o2.compareTo(o1);
            }
        });
        treeSet.add("gg");
        treeSet.add("kk");
        treeSet.add("mm");
        treeSet.add("xx");
        System.out.println( treeSet );  //[xx, mm, kk, gg]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值