使用 Java Comparator(Using Java Comparator)
优质
小牛编辑
130浏览
2023-12-01
TreeSet和TreeMap都按排序顺序存储元素。 但是,比较器精确定义了sorted order含义。
Comparator接口定义了两个方法:compare()和equals()。 这里显示的compare()方法比较了两个元素 -
比较方法
int compare(Object obj1, Object obj2)
obj1和obj2是要比较的对象。 如果对象相等,则此方法返回零。 如果obj1大于obj2,则返回正值。 否则,返回负值。
通过重写compare(),您可以改变对象的排序方式。 例如,要以相反的顺序排序,您可以创建一个反转比较结果的比较器。
等于方法
这里显示的equals()方法测试对象是否等于调用比较器 -
boolean equals(Object obj)
obj是要进行相等性测试的对象。 如果obj和调用对象都是Comparator对象并使用相同的顺序,则该方法返回true。 否则,它返回false。
覆盖equals()是不必要的,大多数简单的比较器都不会这样做。
例子 (Example)
import java.util.*;
class Dog implements Comparator<Dog>, Comparable<Dog> {
private String name;
private int age;
Dog() {
}
Dog(String n, int a) {
name = n;
age = a;
}
public String getDogName() {
return name;
}
public int getDogAge() {
return age;
}
// Overriding the compareTo method
public int compareTo(Dog d) {
return (this.name).compareTo(d.name);
}
// Overriding the compare method to sort the age
public int compare(Dog d, Dog d1) {
return d.age - d1.age;
}
}
public class Example {
public static void main(String args[]) {
// Takes a list o Dog objects
List<Dog> list = new ArrayList<Dog>();
list.add(new Dog("Shaggy", 3));
list.add(new Dog("Lacy", 2));
list.add(new Dog("Roger", 10));
list.add(new Dog("Tommy", 4));
list.add(new Dog("Tammy", 1));
Collections.sort(list); // Sorts the array list
for(Dog a: list) // printing the sorted list of names
System.out.print(a.getDogName() + ", ");
// Sorts the array list using comparator
Collections.sort(list, new Dog());
System.out.println(" ");
for(Dog a: list) // printing the sorted list of ages
System.out.print(a.getDogName() +" : "+ a.getDogAge() + ", ");
}
}
这将产生以下结果 -
输出 (Output)
Lacy, Roger, Shaggy, Tammy, Tommy,
Tammy : 1, Lacy : 2, Shaggy : 3, Tommy : 4, Roger : 10,
Note - Arrays类的排序与Collections相同。