Java比较器

基本数据类型的变量可以用比较运算符来比较大小,类实例化的对象如果要比较大小需要借助比较器(比较方法),比较对象的地址值是否相等可以用= =。
Java中有三个比较对象的方法:
boolean equals(Object obj)
比较两个对象是否相等。该方法声明在Object类中的方法,其采用的比较方式是==(即比较对象的地址值)
String类、包装类都重写了该方法,重写的equals方法一般比较的是对象的内容是否相等(即逐个比较对象的属性)。
int compareTo(Object obj)
比较两个对象的大小,该比较方法主要用于集合中的自然排序。
升序排序返回值规则:返回正数:this>obj|返回负数:this< obj|返回0:this = =obj。降序排序规则需反过来。
该方法声明在Comparable接口中的抽象方法,自定义类中应该实现该接口的compareTo方法。String类、包装类都实现了该方法。
自然排序时,对象之间比较大小默认调用的是对象所属类中的compareTo方法。
int compare(Object obj1, Object obj2)
比较两个对象的大小,该比较方法主要用于集合中的定制排序。
升序排序返回值规则:返回正数:obj1>obj2|返回负数:obj1<obj2|返回0:obj1==obj2。降序排序规则需反过来。
该方法声明在Comparator接口中,使用此方法比较需new一个实现了该接口的类的对象,将此对象作为比较器使用,比较的方式写在重写的compare方法中
可以使用匿名子类的方式new此对象,方便快捷。
String类、包装类都实现了该方法。
Comparator comparator = new Comparator(){
//匿名子类重写compare比较方法
public int compare(比较对象的类型 obj1, 比较对象的类型 obj2){
//比较过程根据业务逻辑,比较完成后返回 正数或负数或0
}
};
补充:类中的hashCode方法
int hashCode() 此方法声明在Object类中,其返回的是对象的哈希码值。

在有些场合需要用对象的哈希值进行比较(如集合中),此时就需要在对象所在类中重写hashCode
重写hashCode()方法的原则如下:
	重写的hashCode()和equals()尽可能保持一致性,即具有相同内容的对象必须具有相等的哈希值

--------------------------------- 实现Comparable接口 ---------------------------------
public class OopTest {
public static void main(String[] args){
Student[] stus = new Student[]{new Student(“张三”,15),new Student(“李四”,16),new Student(“王二”,12)};
Arrays.sort(stus); //由于compareTo方法中return this.age - s.age;是升序比较,所以这里是升序排序。
System.out.println(Arrays.toString(stus));
}
}

class Student implements Comparable{
private String name;
private int age;
public Student(String name,int age){
this.name = name;
this.age = age;
}
//比较器
public int compareTo(Object obj){
Student s = (Student)obj;
if(this.age - s.age == 0){
return this.name.compareTo(obj.name); //如果年龄相同则按照姓名比较
}
return this.age - s.age;
}
//toString()
public String toString(){
return “(name=”+name + “,age=”+age+“)”;
}
}


版权声明:本文为weixin_42899502原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。