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);
}