# Java 比较器示例 > 原文: [https://javatutorial.net/java-comparator-example](https://javatutorial.net/java-comparator-example) 在本教程中,我们将讨论 Java 比较器及其示例。 ## 什么是 Java 比较器? Java `Comparator`是用于比较 Java 对象的接口。 在`java.util.comparator`包中,Java `Comparator`的`compare(Object 01, Object 02)`方法比较两个 Java 对象。 通过使用可配置的方法,Java `Comparator`可以以正数、零或负数返回比较结果。 由于不限于检查数字,因此可以将 Java `Comparator`用于比较任何对象。 使用`java.io.Serializable`,可以将 Java 比较器同样用于有效地比较序列化的信息结构。 Java `Comparator`类似于`Comparable`接口,但可用于交换排序顺序,其中`Comparable`可通过常规顺序(如字典序)进行排序。 ## 语法 ```java public int compare(Object obj1, Object obj2) ``` 如何使用 Java 比较器? [`TreeSet`](https://javatutorial.net/java-treeset-example)和[`TreeMap`](https://javatutorial.net/java-treemap-example) 都以自然顺序存储元素。 不管怎样,比较器明确地描述了用于排序的顺序。 比较器接口具有两种技术的特征:`compare()`和`equals()`。存在`compare()`方法,专注于请求的两个组成部分: ## `compare`方法 int compare(Object obj1,Object obj2) `obj1`和`obj2`得到比较。 如果对象相等,则此方法返回零。 如果`obj1`比`obj2`更大,它将返回正数。 否则返回负数。 通过实现`compare()`,可以修改比较的方式。 例如,要按反向进行排序,可以使比较器反转比较结果。 ![](img/5bc3e122a9704c141357fc8a272d1863.jpg) ## `equals`方法 存在`equals()`方法,用于测试对象是否与调用比较器相符 - `boolean equals(Object obj)` `obj`是检查是否相等的对象。 如果`obj`和被调用对象都是`Comparator`,并且使用类似的方法,则该方法返回真。 否则,它返回`false`。 废除`equals()`是多余的,大多数直接比较器都不会这样做。 ## Java 比较器示例 ```java import java.util.*; class Dog implements Comparator, Comparable { 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 list = new ArrayList(); 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() + ", "); } } ``` ```java OUTPUT: ``` ```java Lacy, Roger, Shaggy, Tammy, Tommy, Tammy : 1, Lacy : 2, Shaggy : 3, Tommy : 4, Roger : 10, ``` #### Java 比较器的工作示例。 ```java import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Comparator; class Student { // instance member variables String Name; int Age; // parameterized constructor public Student(String Name, Integer Age) { this.Name = Name; this.Age = Age; } public String getName() { return Name; } public void setName(String Name) { this.Name = Name; } public Integer getAge() { return Age; } public void setAge(Integer Age) { this.Age = Age; } // overriding toString() method @Override public String toString() { return "Customer{" + "Name=" + Name + ", Age=" + Age + '}'; } static class CustomerSortingComparator implements Comparator { @Override public int compare(Student customer1, Student customer2) { // for comparison int NameCompare = customer1.getName().compareTo(customer2.getName()); int AgeCompare = customer1.getAge().compareTo(customer2.getAge()); // 2-level comparison using if-else block if (NameCompare == 0) { return ((AgeCompare == 0) ? NameCompare : AgeCompare); } else { return NameCompare; } } } public static void main(String[] args) { // create ArrayList to store Student List al = new ArrayList<>(); // create customer objects using constructor initialization Student obj1 = new Student("Ajay", 27); Student obj2 = new Student("Sneha", 23); Student obj3 = new Student("Simran", 37); Student obj4 = new Student("Ajay", 22); Student obj5 = new Student("Ajay", 29); Student obj6 = new Student("Sneha", 22); // add customer objects to ArrayList al.add(obj1); al.add(obj2); al.add(obj3); al.add(obj4); al.add(obj5); al.add(obj6); // before Sorting arraylist: iterate using Iterator Iterator custIterator = al.iterator(); System.out.println("Before Sorting:\n"); while (custIterator.hasNext()) { System.out.println(custIterator.next()); } // sorting using Collections.sort(al, comparator); Collections.sort(al, new CustomerSortingComparator()); // after Sorting arraylist: iterate using enhanced for-loop System.out.println("\n\nAfter Sorting:\n"); for (Student customer : al) { System.out.println(customer); } } } ``` **输出**: ```java Unsorted 111 bbbb london 131 aaaa nyc 121 cccc jaipur Sorted by rollno 111 bbbb london 121 cccc jaipur 131 aaaa nyc Sorted by name 131 aaaa nyc 111 bbbb london 121 cccc jaipu ```