在Java中,可以通過覆蓋equals()方法來實現自定義的比較器
首先,創建一個名為Person的類,包含name和age屬性:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
接下來,創建一個名為PersonComparator的類,實現Comparator<Person>接口,并覆蓋equals()方法:
import java.util.Comparator;
public class PersonComparator implements Comparator<Person> {
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person other = (Person) obj;
return age == other.age &&
(name == other.name || (name != null && name.equals(other.name)));
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + age;
return result;
}
@Override
public int compare(Person p1, Person p2) {
return Integer.compare(p1.getAge(), p2.getAge());
}
}
在這個例子中,equals()方法首先檢查兩個對象是否相同,然后檢查傳入的對象是否為null或者它們的類是否不同。如果滿足這些條件,則返回false。否則,將傳入的對象強制轉換為Person類型,并比較它們的name和age屬性。
hashCode()方法根據name和age屬性生成一個哈希碼,確保具有相同name和age屬性的Person對象具有相同的哈希碼。
最后,compare()方法實現了按照age屬性進行升序排序的功能。
現在,你可以在需要比較Person對象的地方使用PersonComparator:
import java.util.ArrayList;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
ArrayList<Person> people = new ArrayList<>();
people.add(new Person("Alice", 30));
people.add(new Person("Bob", 25));
people.add(new Person("Charlie", 30));
Collections.sort(people, new PersonComparator());
for (Person person : people) {
System.out.println(person.getName() + ": " + person.getAge());
}
}
}
輸出結果:
Bob: 25
Alice: 30
Charlie: 30
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。