Java 中对象的大小比较

本文详细介绍了Java中如何比较和排序对象。通过覆盖equals方法实现对象内容的比较,以及通过实现Comparable接口和构造Comparator比较器来定制对象的大小比较规则。示例展示了Student类如何根据年龄、身高和体重进行比较,强调了Comparator在不修改原始类的情况下提供多种比较方式的灵活性。
摘要由CSDN通过智能技术生成

1、equals

所有的类都具备的能力(比较两个对象代表的是不是同一个实际事物)

需要覆写 equals 方法才能实现

public class EqualsDemo {
    public static void main(String[] args) {
        Student t1 = new Student("s1");
        Student t2 = new Student("s1");
        Student t3 = new Student("s2");
        Student t4 = new Student("s2");

        System.out.println(t1.equals(t2));
        System.out.println(t1.equals(t3));
    }
}

在这里我们定义了 学生这个类,并重写了 equals 方法:

如果 不重写 equals 的方法,上面代码的执行是两个 false,重写后执行结果是 true 、 false

class Student {
    String name;
    public Student(String name) {
        this.name = name;
    }
     @Override
     public boolean equals(Object o) {
         if (this == o) return true;
         if (o == null || getClass() != o.getClass()) return false;
         Student student = (Student) o;
         return Objects.equals(name, student.name);
     }
 }

2、对象大小的比较:

(1)实现 Comparable 接口

在java中,要声明比较大小能力,需要实现 Comparable 接口

重写 compareTo 方法,指导 java,进行对象大小的比较(通过对象的什么属性比较大小)

class Student2 implements Comparable<Student2>{
    String name;
    int age;
    int height;
    int weight;

    public Student2(String name, int age, int height, int weight) {
        this.name = name;
        this.age = age;
        this.height = height;
        this.weight = weight;
    }

    //指导 java,进行对象大小比较
    @Override
    public int compareTo(Student2 o) {
        if (this.age < o.age) {
            return -1;
        } else if (this.age == o.age) {
            return 0;
        } else {
            return 1;
        }
    }
}

实例化对象,进行对象比较

    public static void main(String[] args) {
        Student2 s1 = new Student2("qbs",22,178,78);
        Student2 s2 = new Student2("ml",21,172,65);

        int i = s1.compareTo(s2);
        if (i < 0) {
            System.out.println("小于");
        } else if (i == 0) {
            System.out.println("等于");
        } else {
            System.out.println("大于");
        }
    }

(2)构造比较器(Comparator)

为什么要使用比较器的方式,上面第一种比较方式怎么了?

 当我们使用 实现Comparable接口 的方式来比较对象大小的时候,我们需要重写 compareTo 方法,在方法中我们定义了对象的比较是采用对象的
 哪种属性来比较大小,而我们想换另外一种对象属性来比较大小的时候,就需要重写 compareTo 方法,而在现实中,我们很少有机会可以修改compareTo
 更多的是对他的使用,所以我们需要另一种方法来满足我们想通过多种方式来比较对象的大小

外部比较(比较器) 实现 Comparator ------- 构造一个天平(不需要比较的类具备 Comparable 的能力)
在这里插入图片描述
构造一个按对象 身高 排序的构造器

class ByHeightComparator implements Comparator<Student2> {
    @Override
    public int compare(Student2 o1, Student2 o2) {
        return o1.height - o2.height;
    }
}

构造一个按对象 体重 排序的构造器

class ByWeightComparator implements Comparator<Student2> {
    @Override
    public int compare(Student2 o1, Student2 o2) {
        return o1.weight - o2.weight;
    }
}

实例化两个对象,分别采用不同的构造比较器比较 两个对象的大小

    public static void main(String[] args) {
        Student2 s1 = new Student2("qbs",22,178,78);
        Student2 s2 = new Student2("ml",21,172,65);

        //构造比较器
        ByHeightComparator byHeight = new ByHeightComparator();
        ByWeightComparator byWeight = new ByWeightComparator();

        int r;
        //按照 年龄 比较(实现 Comparable 接口方法)
        r = s1.compareTo(s2);
        System.out.println(r);
        //按照 身高 比较
        r = byHeight.compare(s1,s2);
        System.out.println(r);
        //按照 体重 比较
        r = byWeight.compare(s1,s2);
        System.out.println(r);
    }
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值