Java 如何使用Comparator

Java 如何使用Comparator

TreeSet和TreeMap都以排序顺序存储元素。然而,正是比较器定义了确切的排序顺序的含义。

Comparator接口定义了两个方法:compare()和equals()。compare()方法如下所示,用于比较两个元素的顺序-

compare方法

int compare(Object obj1, Object obj2)

obj1和obj2是要进行比较的对象。该方法如果对象相等返回零。如果obj1大于obj2则返回正数。否则返回负值。

通过重写compare()方法,您可以改变对象的排序方式。例如,可以创建一个反向比较结果的比较器以实现按照反向顺序排序。

equals方法

equals()方法如下所示,用于测试一个对象是否与调用比较器相等。

boolean equals(Object obj)

obj是要测试是否相等的对象。如果obj和调用对象都是Comparator对象并且使用相同的排序顺序,则该方法返回true。否则,返回false。

覆盖equals()是不必要的,大多数简单的比较器都不会这样做。

示例

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() + ", ");
   }
}

这将产生以下结果 –

输出

Lacy, Roger, Shaggy, Tammy, Tommy,
Tammy  : 1, Lacy  : 2, Shaggy  : 3, Tommy  : 4, Roger  : 10,

注意 - Arrays类的排序方式与Collections类相同。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程