Java 中的 Comparable 与 Comparator
Shivam Arora
2023年10月12日
本文将讨论 Comparable
和 Comparator
,并找出它们在 Java 中的定义和用例之间的差异。
Java 中的 Comparable
对象
Java 中的 Comparable
对象用于将自身与其他对象进行比较。我们需要在类中实现 java.lang.Comparable
接口以使用它并将其与实例进行比较。这个接口有一个名为 compareTo(object)
的方法,它应该与对象的其他方法一致。该函数还定义了对象的自然顺序。
当在同一类中只有一个默认比较或只有一个实现时,我们在 Java 中使用 Comparable
对象。这意味着我们只能根据单个数据比较两个对象。
我们使用 <
、>
和 =
运算符进行比较。这些用于将当前对象与指定对象进行比较。
- 正数,如果当前对象
>
指定的对象。 - 负数,如果当前对象
<
指定的对象。 - 零,如果当前对象
=
指定的对象。
例如,
import java.util.*;
class Employee implements Comparable<Employee> {
int empid;
String name;
int age;
Employee(int empid, String name, int age) {
this.empid = empid;
this.name = name;
this.age = age;
}
public int compareTo(Employee st) {
if (age == st.age)
return 0;
else if (age > st.age)
return 1;
else
return -1;
}
}
public class Main {
public static void main(String args[]) {
ArrayList<Employee> al = new ArrayList<Employee>();
al.add(new Employee(101, "Emp1", 23));
al.add(new Employee(106, "Emp2", 27));
al.add(new Employee(105, "Emp3", 21));
Collections.sort(al);
for (Employee st : al) {
System.out.println(st.empid + " " + st.name + " " + st.age);
}
}
}
输出:
105 Emp3 21
101 Emp1 23
106 Emp2 27
Java Comparator
Comparator
对象用于在 java.lang.Comparator
接口的实现的帮助下比较同一类或两个不同类中的两个不同对象。
当有不止一种比较两个对象的方法时,我们使用比较器
。要使用 Comparator 接口,该类必须实现方法 compare()
。它可用于以可能与对象的自然顺序不一致的方式比较两个对象。
例如,
import java.io.*;
import java.lang.*;
import java.util.*;
class Employee {
int eid;
String name, address;
public Employee(int eid, String name, String address) {
this.eid = eid;
this.name = name;
this.address = address;
}
public String toString() {
return this.eid + " " + this.name + " " + this.address;
}
}
class Sortbyeid implements Comparator<Employee> {
// Used for sorting in ascending order of
// roll number
public int compare(Employee a, Employee b) {
return a.eid - b.eid;
}
}
class Main {
public static void main(String[] args) {
ArrayList<Employee> a = new ArrayList<Employee>();
a.add(new Employee(111, "Emp1", "Delhi"));
a.add(new Employee(131, "Emp2", "Up"));
a.add(new Employee(121, "Emp3", "Jaipur"));
Collections.sort(a, new Sortbyeid());
System.out.println("Sorted: ");
for (int i = 0; i < a.size(); i++) System.out.println(a.get(i));
}
}
输出:
Sorted:
111 Emp1 Delhi
121 Emp3 Jaipur
131 Emp2 Up