Java中自定义类型如何进行比较

Java中自定义类型如何进行比较

假设我们定义了一个Person类,那么如何实现Person类对象的比较呢?

class Person{

    public String name;
    public String gender;
    public int age;
    public String ID;

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

1.需要实现Comparable接口中的compareTo方法—>自然排序的实现方式

需要手动实现接口,侵入性比较强,但一旦实现,每次用该类都有顺序,属于内部顺序。缺点也很明显,只能选择一个属性来排序。

class Person implements Comparable<Person>{
    public String name;
    public String gender;
    public int age;
    public String ID;

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

    @Override
    public int compareTo(Person o) {
        int ret = age - o.age;
        if(ret < 0)
            return -1;
        else if(ret > 0)
            return 1;
        else
            return 0;
    }

    @Override
    public String toString() {
        return name + "--" + gender + "--" + age + "--" + ID;
    }

    public static void main(String[] args) {
         Person[] personArr = {new Person("张三", "男", 19, "123456"),
                new Person("李四", "男", 18, "138956"),
                new Person("王五", "男", 29, "103456")} ;
        Arrays.sort(personArr);
        System.out.println(Arrays.toString(personArr));
        //[李四--男--18--138956, 张三--男--19--123456, 王五--男--29--103456]
    }
}

2.实现比较器Comparator接口中的compare方法—>非自然排序的实现方式

需要实现一个比较器对象,对待比较类的侵入性弱,但对算法代码实现侵入性强。可以根据不同的比较属性构造比较器。

class PersonAgeComparator implements Comparator<Person>{
    @Override
    public int compare(Person o1, Person o2) {
        int ret = o1.age - o2.age;
        if(ret < 0)
            return -1;
        else if(ret > 0)
            return 1;
        else
            return 0;
    }
}

class PersonIDComparator implements Comparator<Person>{
    @Override
    public int compare(Person o1, Person o2) {
        return -o1.compareTo(o2);
    }
}

public static void main(String[] args) {
       Person[] personArr = {new Person("张三", "男", 19, "123456"),
                new Person("李四", "男", 18, "138956"),
                new Person("王五", "男", 29, "103456")} ;
        Arrays.sort(personArr, new PersonIDComparator());
        System.out.println(Arrays.toString(personArr));
        //[王五--男--29--103456, 张三--男--19--123456, 李四--男--18--138956]
        
		Arrays.sort(personArr, new PersonAgeComparator
        System.out.println(Arrays.toString(personArr));
        //[李四--男--18--138956, 张三--男--19--123456, 王五--男--29--103456]
        
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值