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