位置:首頁 > Java技術 > Java教學 > Java如何使用比較器?

Java如何使用比較器?

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是equal被測試的對象。如果obj和調用對象是兩個比較對象,並使用相同的排序方法返回true。否則,返回false。

重寫equals()方法是不必要的,也是最簡單的比較是不會這樣做的。

例子:

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類的排序和集合一樣。