java中的比较器(重新指定规则的那种)

为什么要用比较器

例如:我们需要将一个数组从小到大排序
代码如下

	int[] arr = {2,5,8,9,1,3,6,7,4};
	Arrays.sort(arr);
	for(int i : arr){
		System.out.print(i + " ");
	}
	//结果为1 2 3 4 5 6 7 8 9 

上述代码我们使用了Arrays这个工具类,那么问题来了很多时候我们希望数据根据自己的规则进行排序,这个时候就需要使用比较器了
还是这个问题不过是将数组从大到小进行排序
代码如下

 public static void main( String[] args ){
        Integer[] arr = {2,5,8,9,1,3,6,7,4};
        Arrays.sort(arr,new MySort ());
        for (int i : arr) {
            System.out.print (i + " ");
        }
    }
}

//实现了比较器接口
class MySort implements Comparator<Integer>{

    @Override
    public int compare( Integer o1, Integer o2 ) {
    	//o1 - o2 从小到大排
    	//o2 - o1 从大到小排
    	//o1 = o2 谁在前面无所谓
        return o2 - o1;
    }
}
//结果为9 8 7 6 5 4 3 2 1 

这样我们就完成了比较器的使用,是不是感觉很简单,让我们进阶一丢丢,新建一个Person类 ,按照他们的年龄从大到小进行排序,是不是一下子就有头绪啦,快快快动起来,完成之后才能看答案哦
代码如下

 public static void main( String[] args ){
        Person[] arr = new Person[3];
        arr[0] = new Person ("P1" , 18 ,1);
        arr[1] = new Person ("P2" , 78 ,2);
        arr[2] = new Person ("P3" , 10 ,3);
        Arrays.sort (arr , new MySort ());
        for (Person person : arr) {
            System.out.println (person);
        }
}
class MySort implements Comparator<Person>{


    @Override
    public int compare( Person o1, Person o2 ) {
        return o2.age - o1.age;
    }
}

class Person{
    String name;
    int age;
    int id;

    public Person( String name, int age, int id ) {
        this.name = name;
        this.age = age;
        this.id = id;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", id=" + id +
                '}';
    }
}
/*
结果为:
	Person{name='P2', age=78, id=2}
	Person{name='P1', age=18, id=1}
	Person{name='P3', age=10, id=3}
*/

是不是和自己写的一样呀,现实情况中,可能会有十分复杂的比较,利用上述规则和使用方法,就可以完成功能的实现啦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值