重写 Java 中的 CompareTo 方法
compareTo()
方法属于 Java 中的 Comparable
接口。它用于比较两个对象。
它将此对象与指定的对象进行比较以进行排序。如果此对象小于指定对象,则返回负整数,如果此对象等于指定对象,则返回零,如果此对象大于指定对象,则返回正整数。
虽然,Java 提供了几种其他方法来对值进行排序,例如:
-
Arrays.sort()
方法按升序对数组的元素进行排序。 -
与
Arrays.sort()
方法类似的Collections.sort()
方法。我们可以使用这种方法对数组、队列
、链表
等进行排序。 -
比较器接口
用于根据自定义顺序排序对对象的数组或列表进行排序。例如,对于学生对象
的列表,自然顺序可以按学生的入学号码排序。尽管如此,在现实生活中的应用程序中,我们可能希望按学生的
姓氏
、名字
、出生日期
或任何其他此类标准对学生列表进行排序。在这种情况下,我们使用比较器
接口。 -
Comparable
接口用于对用户定义类对象进行排序。可比较接口仅提供单个排序序列,即我们只能基于单个数据基础对元素进行排序。例如,它可能是
年龄
、卷号
、姓名
或其他任何东西。
总而言之,如果我们想根据自然顺序对对象进行排序,我们使用可比较接口的 compareTo()
方法。
然而,如果我们想根据不同对象的属性对对象进行排序或自定义排序,我们使用 Comparator 接口的 compare()
。
重写 Java 中的 compareTo()
方法
要根据操作需要对对象进行排序或比较,我们首先需要在类中实现 Comparable
接口,然后重写 compareTo()
方法。
由于我们必须对对象数组进行排序,传统的 array.sort()
方法将不起作用,因此我们调用 Arrays.sort()
方法并传递对象数组。
它将搜索我们是否重写了 compareTo()
方法。由于我们已经重写了 compareTo()
,所以对象将根据年龄使用这个 compareTo()
方法进行比较。
package javaexample;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
public class SimpleTesting implements Comparable<SimpleTesting> {
String name;
int age;
// Creating constructor
SimpleTesting(String name, int age) {
this.name = name;
this.age = age;
}
public int getage() {
return age;
}
public String getname() {
return name;
}
public static void main(String[] args) {
// Creating OverrideCompareto class object
SimpleTesting ob[] = new SimpleTesting[4];
// Inserting elements in the objects
ob[0] = new SimpleTesting("Virat", 71);
ob[1] = new SimpleTesting("Rohit", 20);
ob[2] = new SimpleTesting("Dhoni", 11);
ob[3] = new SimpleTesting("Jadeja", 18);
// sorting the array,using overriden method
Arrays.sort(ob);
for (SimpleTesting o : ob) {
// printing the sorted array objects name and age
System.out.println(o.name + " " + o.age);
}
// Creating a dynamic array by using an ArrayList
ArrayList<SimpleTesting> objects = new ArrayList<>();
// creating a new OverrideComparreto object
SimpleTesting newObject1 = new SimpleTesting("Shardul Thakur", 20);
objects.add(newObject1);
// creating a new GFG object
SimpleTesting newObject2 = new SimpleTesting("Jasprit Bumrah", 22);
// inserting the new object into the arraylist
objects.add(newObject2);
// using Collections to sort the arraylist
Collections.sort(objects);
for (SimpleTesting o : objects) {
// printing the sorted objects in arraylist by name and age
System.out.println(o.name + "" + o.age);
}
}
// Overriding compareTo() method
@Override
public int compareTo(SimpleTesting o) {
if (this.age > o.age) {
// if current object is greater --> return 1
return 1;
} else if (this.age < o.age) {
// if current object is greater --> return -1
return -1;
} else {
// if current object is equal to o --> return 0
return 0;
}
}
}
输出:
Dhoni 11
Jadeja 18
Rohit 20
Virat 71
Shardul Thakur20
Jasprit Bumrah22
让我们看另一个比较两个对象年龄的 compareTo()
方法示例。
package java example;
import java.util.*;
public class SimpleTesting implements Comparable<SimpleTesting> {
// Java Program which shows how to override the compareTo() method of comparable
// interface
// implementing Comparable interface
int age;
// Creating constructor
SimpleTesting(int age) {
this.age = age;
}
public static void main(String[] args) {
// Creating a dynamic array by using an arraylist
List<SimpleTesting> list = new ArrayList<>();
// Inserting elements in the objects
list.add(new SimpleTesting(56));
list.add(new SimpleTesting(66));
list.add(new SimpleTesting(21));
Collections.sort(list);
list.forEach(el -> System.out.println(el.age));
}
// Overriding compareTo() method
@Override
public int compareTo(SimpleTesting user) {
return this.age >= user.age ? -1 : 0;
}
}
输出:
66
56
21
在本教程中,我们看到了 Java 中用于排序的不同类型的技术。我们还了解了如何借助示例重写 Java 中的 compareTo()
方法。