一、eqlals方法
equals方法用于比较两个自定义的对象是否相等,默认的是比较两个对象的地址是否相等
public class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
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 ==null || !(o instanceof Student)){
return false;
}
//此时o空且是Student类的对象,向下转型还原,比较
Student stu=(Student) o;
return this.name.equals(stu.name);
}
}
Student st1=new Student("lili",20);
Student st2=new Student("lili",18);
Student st3=new Student("lele",20);
System.out.println(st1.equals(st2));
System.out.println(st1.equals(st3));
二、Comparable接口
这个接口不仅能比较两个对象,还能得出两个对象谁大谁小,进行排序
导入包:java.lang.Comparable
当类覆写了Comparable接口,这个类(Student1)就具有了比较大小的能力
package compare;
public class Student1 implements Comparable<Student1>{
private String name;
private int age;
public Student1(String name, int age) {
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int compareTo(Student1 o) {
if(this.age==o.age){
return 0;
}
else if(this.age<o.age){
return -1;
}
else {
return 1;
}
}
@Override
public String toString() {
return "Student1{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
Student1 stuednt1=new Student1("lili",20);
Student1 student2=new Student1("lili",18);
Student1 student3=new Student1("lele",22);
Student1[] students={stuednt1,student2,student3};
Arrays.sort(students);
//因为Student1覆写了Comparable接口,所以students具备了可以比较的能力,所以可以根据覆写的方法进行排序
System.out.println(Arrays.toString(students));
运行结果:
三、Comparator比较器
用Comparable接口排序,是升序还是降序需要改类中的comparTo方法,但是Comparator比较器比较灵活,可以不修改原来类的方法,自己建一个新的类去实现比较,这样的话,不论想要升序还是想要降序,自己需要改新建的这个类的比较,然后灵活调用就行
用Compartor比较器,这个类(Student1)不具备可比较的能力,因为此时创建看一个新类(AgeSec),调用这个类来对原来Student1的对象进行比较
package compare;
public class Student1 {
private String name;
private int age;
public Student1(String name, int age) {
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student1{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
package compare;
import java.util.Comparator;
//这个类实现了Compator这个比较器,每次想比较数据,直接改这个类的比较就行,不用动Student1这个类
//直接在比较Student1类时,直接调用这个类就行
//Student1[] students={stuednt1,student2,student3};
// AgeSec ageSec=new AgeSec();
// Arrays.sort(students,ageSec);
public class AgeSec implements Comparator<Student1> {
@Override
public int compare(Student1 o1, Student1 o2) {
if (o1.getAge()==o2.getAge()){
return 0;
}
else if(o1.getAge()>o2.getAge()){
return -1;
}
else {
return 1;
}
}
}
Student1 stuednt1=new Student1("lili",20);
Student1 student2=new Student1("lili",18);
Student1 student3=new Student1("lele",22);
Student1[] students={stuednt1,student2,student3};
AgeSec ageSec=new AgeSec();
Arrays.sort(students,ageSec);
System.out.println(Arrays.toString(students));
运行结果: