Java CompareTo方法区别详解
什么是Java CompareTo方法?
CompareTo()是Java中一个比较方法,用于对两个对象进行比较。在Java中,对象可以比较大小。如果Object A比Object B大,则compareTo()会返回一个正值。如果Object A比Object B小,则compareTo()会返回一个负的值。如果两个Object相等,则返回0.
为什么要使用CompareTo方法?
CompareTo()方法的主要目的是对象排序。它可以帮助我们对一个集合进行排序。例如,如果我们有一个保存学生列表的ArrayList,我们可以使用CompareTo()方法对它们按照学号进行排序。
CompareTo()方法的用法
我们来看一下如何使用CompareTo()方法
定义一个类
首先我们需要定义一个类。例如我们定义了一个名为Student的类,它有两个属性:学号和姓名。
public class Student implements Comparable<Student> {
private String studentName;
private int studentNumber;
public Student(String studentName, int studentNumber){
this.studentName = studentName;
this.studentNumber = studentNumber;
}
// getters and setters
@Override
public int compareTo(Student otherStudent) {
return this.studentNumber - otherStudent.studentNumber;
}
}
实例化类
现在我们需要实例化这个类。
Student s1 = new Student("Tom", 100);
Student s2 = new Student("Jerry", 80);
比较两个对象的大小
比较两个对象的大小需要使用CompareTo()方法。
int result = s1.compareTo(s2);
如果s1的学号比s2大,则result是一个正值。如果s1的学号比s2小,则result是一个负值。如果两个学号相等,则result会是0.
CompareTo()方法的常见错误
在使用CompareTo()方法时,会经常犯一些错误,例如:
- 忘记实现Comparable接口
比如上面的例子,我们开头就写了Student类实现Comparable接口。如果忘记了这一步,程序就无法编译通过。
- 返回值错误
如果我们的CompareTo()方法返回值是一个负数,但是我们希望对象是相等的,那么就会出现问题。
示例说明
考虑一个Person类,它由姓名、年龄、身高三个属性组成。
public class Person implements Comparable<Person>{
private String name;
private int age;
private int height;
public Person(String name,int age,int height){
this.name = name;
this.age = age;
this.height = height;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
public int getHeight(){
return height;
}
@Override
public int compareTo(Person o) {
int compareResult= Integer.compare(this.age,o.getAge());
if(compareResult==0){
compareResult= Integer.compare(this.height,o.getHeight());
}
if(compareResult==0){
compareResult= name.compareTo(o.getName());
}
return compareResult;
}
}
我们创建了一个包含三个属性的Person类,并在compareTo()方法中通过三个属性的值作为排序的依据。
class PersonSortingUtility{
public static void main(String[] args) {
List<Person> personList =new ArrayList<Person>();
personList.add(new Person("Mike",23,175));
personList.add(new Person("John",20,174));
personList.add(new Person("David",20,183));
personList.add(new Person("Mike",25,175));
System.out.println("Before sorting : " + personList);
Collections.sort(personList,Person::compareTo);
System.out.println("After sorting : " + personList);
}
}
排序后结果为:
Before sorting : [Person{name='Mike', age=23, height=175}, Person{name='John', age=20, height=174}, Person{name='David', age=20, height=183}, Person{name='Mike', age=25, height=175}]
After sorting : [Person{name='David', age=20, height=183}, Person{name='John', age=20, height=174}, Person{name='Mike', age=23, height=175}, Person{name='Mike', age=25, height=175}]
可以看到,排序前按照添加的顺序输出,排序后按照age、height、name的顺序排序。
总结
通过这篇教程,我们学习了Java CompareTo()方法的用法和示例,可以帮助我们更好地理解Comparable接口和比较对象。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java compare compareTo方法区别详解 - Python技术站