Comparator----Java常用类库

Comparator接口----Java常用类库

前言

​ 现在如果一个类已经开发完成,但是此类在建立时的初期并没有实现Comparable接口,此时肯定是无法进行对象排序操作的,所以为了解决这样的问题,Java又定义了另一个比较器的操作接口----Comparator。此接口定义在java.util包中。接口定义如下:

public interface Comparator<T>{
	public int compare(To 1, To 2);
	boolean equals(Object obj);
}

若要实现此接口,必须实现此接口中的两个方法。

案例演示

package chapter_eleven;

import java.util.Arrays;
import java.util.Comparator;
import java.util.Objects;

class Student01{
    private String name;                            //定义属性name、age
    private int age;

    public Student01(){}                            //定义无参的构造方法
    public Student01(String name, int age) {        //定义有参的构造方法
        this.name = name;
        this.age = age;
    }

    //setter和getter方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if(this == o){                                  //首先判断两个对象是否相等
            return true;
        }
        if(!(o instanceof Student01)){                  //若Object类对象o是否为Student01类的对象,若不是,返回false
            return false;
        }
        Student01 student01 = (Student01)o;             //通过对象的向下转型,获取student01对象

        if(student01.name.equals(this.name) && student01.age == age){       //若两个对象的name属性和age属性相同
            return true;                                //返回true
        }else{
            return false;                               //否则返回false
        }
    }

    @Override
    public String toString() {
        return "Student01{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}' + "\n";
    }
}


//定义对某个类的专门比较器,用做对象数组的排序
class StudentComparator implements Comparator<Student01>{

    @Override
    public int compare(Student01 o1, Student01 o2) {
        if(o1.equals(o2)){                                  //若两个对象相等,返回0
            return 0;
        }else if(o1.getAge() < o2.getAge()){                //若对象不相等,则根据年龄进行排序
            return 1;
        }else {
            return -1;
        }
    }
}

public class ComparatorDemo01 {
    public static void main(String[] args) {

        Student01[] student01s = {                                 //定义学生对象数组
                new Student01("张三",20),
                new Student01("李四",22),
                new Student01("王五",20),
                new Student01("赵六",20),
                new Student01("孙七",22)
        };

        Arrays.sort(student01s,new StudentComparator());            //对学生对象数组进行排序

        System.out.println(Arrays.toString(student01s));            //输出所有学生对象信息
    }
}

运行结果

[Student01{name='孙七', age=22}
, Student01{name='李四', age=22}
, Student01{name='赵六', age=20}
, Student01{name='王五', age=20}
, Student01{name='张三', age=20}
]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gaolw1102

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值