重寫 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()
方法。